Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MYSQL working slowly as query with subquery than 2 queries (+php)

I have table (about 80'000 rows), looks like

id, parentId, col1, col2, col3...
 1,     null, 'A', 'B', 'C'
 2,        1, ...
 3,        1, ...
 4,     null, ...
 5,        4, ...

(one level parent - child only)

and I need get all dependent rows -

SELECT ... 
FROM table 
WHERE id = :id OR parentId = :id OR id IN (
    SELECT parentId 
    FROM table 
    WHERE id = :id
    )

but why this request working slowly instead 2 request - if I get parentId on php first?

$t = executeQuery('SELECT parentId FROM table WHERE id = :Id;', $id);
if ($t) {
    $id = $t;
}

$t = executeQuery('SELECT * FROM table WHERE id = :id OR parentId = :id ORDER BY id;', $id);

PS: max depends rows < 70

PPS:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   PRIMARY product ALL PRIMARY,parentId    NULL    NULL    NULL    73415   Using where
2   DEPENDENT SUBQUERY  product const   PRIMARY,parentId    PRIMARY 4   const   1
like image 244
Dmitriy Kozmenko Avatar asked Oct 06 '22 13:10

Dmitriy Kozmenko


1 Answers

Change the IN for an equal =

SELECT ... 
FROM table 
WHERE id = :id OR parentId = :id OR id = (
    SELECT parentId 
    FROM table 
    WHERE id = :id
    )

or change it to a join:

SELECT ... 
FROM table 
    inner join ( 
        SELECT parentId 
        FROM table 
        WHERE id = :id
    ) s on s.parentID = table.id or s.parentID = table.parentID
like image 107
Clodoaldo Neto Avatar answered Oct 10 '22 03:10

Clodoaldo Neto