У меня есть левый оператор соединения для 2 таблиц: в tbl1 содержится около 1 миллиона записей, а в tbl2 - около 20 миллионов. Выполнение запроса занимает около 9 секунд. У меня есть индексы на обоих, но что-то кажется неправильным, учитывая, сколько времени занимают запросы. Вот мое утверждение:
EXPLAIN SELECT * FROM (SELECT tbl1.id, tbl1.name, tbl2.addr FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id WHERE tbl1.name LIKE 'G%' AND tble2.addr IS NOT NULL) as tempTable GROUP BY id LIMIT 10;
+----+-------------+------------+--------+------------------+--------------+---------+----------------|
id|select_type| table |type |poss_keys|key |key_len|ref | rows | Extra
+----+-------------+------------+--------+------------------+--------------+---------+----------------
1 | PRIMARY | <derived2>|system| NULL |NULL| NULL |NULL | 0 | const row not found |
2 | DERIVED | tbl1 |range |id,name |name| 903 |NULL | 1 | Using where |
2 | DERIVED | tbl2 |ref |id,addr |id | 4 |tbl2.tbl1.id| 25 | Using where |
+----+-------------+------------+--------+------------------+--------------+---------+----------------
UPDATE:
Если я вынимаю оператор соединения и просто выбираю записи из таблицы tbl1 или из таблицы tbl2 по отдельности, операторы выбора выполняются быстро (не более 1 секунды), но когда я пытаюсь присоединиться к ним, тогда это заметно замедляет их ... правильно ли я присоединяюсь к ним или мне нужен какой-то специальный индекс для объединений?