Справочное руководство по MySQL




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.


3.5.6 Использование внешних ключейОглавление3.5.8 Подсчет посещений за день