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 Раздел 6.4.1.2, «Синтаксис оператора UNION
».