MySQL где состояние - PullRequest
       9

MySQL где состояние

2 голосов
/ 03 февраля 2010

Меня интересует, где состояние; если я напишу:

Select * from table_name 
where insert_date > '2010-01-03' 
and text like '%friend%';

отличается от:

Select * from table_name 
where text like '%friend%'  
and insert_date > '2010-01-03';

Я имею в виду, если таблица очень большая, имеет много строк и если mysql сначала берет записи, соответствующие условию "where insert_date> '2010-01-03'", а затем ищет в этих записях слово "friend" это может быть намного быстрее, чем при первом поиске строк «друзей», а также при просмотре поля даты.

Важно ли умно писать, где условие, или mysql анализирует условие и переписывает, где условие наилучшим образом?

спасибо

Ответы [ 4 ]

3 голосов
/ 03 февраля 2010

Нет, два предложения where должны быть эквивалентны. Оптимизатор должен выбрать тот же индекс, который вы используете.

Порядок столбцов в индексе все же имеет значение .

Если вы считаете, что оптимизатор использует неправильный индекс, вы можете дать ему подсказку . Чаще всего есть веская причина для использования выбранного им индекса, поэтому, если вы точно не знаете, что делаете, советы оптимизатора часто ухудшают ситуацию, а не улучшают.

2 голосов
/ 03 февраля 2010

Я не знаю, в частности, о MySQL, но обычно этот вид оптимизации остается за механизмом базы данных, поскольку порядок выполнения быстрее зависит от индексов, количества данных и количества данных.

0 голосов
/ 03 февраля 2010

По определению логическое соединение (оператор AND) является коммутативным.Это означает, что WHERE A AND B равно WHERE B AND A.

Не имеет значения, в каком порядке вы пишете свои условия.

Однако разница в том, какие индексы у вас есть в вашей таблице.Анализатор запросов учитывает их.Он также достаточно умен, чтобы найти ту часть условия, которую проще всего проверить, и применить ее сначала.

0 голосов
/ 03 февраля 2010

Я думаю, это правда, что оба условия where одинаковы в абстракции базы данных

...