MySQL объясняет в запросе на объединение
-
16-09-2019 - |
Вопрос
После выполнения EXPLAIN для запроса:
explain
select name from t1 where name like '%smthing%'
UNION ALL
select name from t2 where name like '%smthing%'
UNION ALL
select name from t3 where name like '%smthing%'
UNION ALL
select name from t4 where name like '%smthing%'
составленный СОЮЗом из 4 таблиц, я получаю это:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index (NULL) name 152 (NULL) 337 Using where; Using index
2 UNION t2 index (NULL) name 152 (NULL) 3842 Using where; Using index
3 UNION t3 index (NULL) name 452 (NULL) 204 Using where; Using index
4 UNION t4 index (NULL) name 452 (NULL) 8269 Using where; Using index
(NULL) UNION RESULT <union1,2,3,4> ALL (NULL) (NULL) (NULL) (NULL) (NULL)
Когда объясняется каждый компонент объединения, типом является «ИНДЕКС», однако тип результата объединения — «ВСЕ».В чем причина такого поведения?Спасибо
Решение
Попробуйте использовать UNION ALL вместо UNION - в противном случае MySQL попытается удалить все повторяющиеся строки (предположительно за вычетом индексов таблицы, поскольку он просматривает набор результатов).
Кроме того, есть ли у вас предложение ORDER BY или WHERE для результата UNION?Опять же, это будет выполняться на наборе результатов, а не на уровне таблицы.
Не связан с StackOverflow