3.5.7 Поиск по двум ключам
MySQL пока не осуществляет оптимизации, если поиск производится по двум
различным ключам, которые связаны при помощи оператора OR
(поиск по одному
ключу с различными частями OR
оптимизируется хорошо):
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1'
OR field2_index = '1'
Причина заключается в том, что у нас не было времени, чтобы придумать
эффективный способ обработки этого случая (сравните: обработка оператора
AND
теперь работает хорошо)
В настоящее время данную проблему очень эффективно можно решить при помощи
временной таблицы. Этот способ оптимизации также хорошо подходит, если вы
запускаете очень сложные запросы, когда SQL-сервер делает оптимизацию в
неправильном порядке.
CREATE TEMPORARY TABLE tmp
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1';
INSERT INTO tmp
SELECT field1_index, field2_index FROM test_table WHERE field2_index = '1';
SELECT * from tmp;
DROP TABLE tmp;
Вышеупомянутый способ выполнения этого запроса - это фактически UNION
(объединение) двух запросов. See section 6.4.1.2 Синтаксис оператора UNION
.