Mam zagwostkę i pytanie. Here is situation.
Zapytanie :
SELECT count( id ) FROM stats WHERE serviceid IN ( SELECT id FROM services WHERE name LIKE 'wp%' GROUP BY id)
Tabela stats ma około 70 MB i szczerze powiedziawszy jest kiepsko zoptymalizowana.
Nie starczyło mi cierpliwości, żeby sprawdzić jak długo wykonuje się to zapytanie.
Jeżeli wykonuję je osobno tzn:
SELECT id FROM services WHERE name LIKE 'wp%' GROUP BY id
dostaje 32 rzędy w 0.00 sec
SELECT count( id ) FROM stats WHERE serviceid
dostaje odpowiedź w 0.00 sec
jeżeli wezmę oszukam całą procedurę i wstawie do IN wynik zapytania:
SELECT count( id ) FROM stats WHERE serviceid IN (60,65,66,67,68,69,70,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,165,166,167,271)
dostaję odpoeidź w 0.42 sec
Pytanie - dlaczego wykonanie dwóch selectów na raz trwa nieskończenie dłużej niż takie "oszukanie" zapytanie z IN-em??
Jak można przekonać optymalizera MySQL-owego do poprwnej interpretacji??