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».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
