Вопрос

После выполнения 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?Опять же, это будет выполняться на наборе результатов, а не на уровне таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top