Влияет ли порядок логических операторов на производительность в запросе MySQL? - PullRequest
2 голосов
/ 08 октября 2009

Предположим, я хочу запросить таблицу на основе нескольких предложений WHERE.

Будет ли одно из этих утверждений быстрее другого?

  SELECT * 
    FROM table 
   WHERE (line_type='section_intro' OR line_type='question') 
     AND (line_order BETWEEN 0 AND 12) 
ORDER BY line_order";

... или:

  SELECT * 
    FROM table 
   WHERE (line_order BETWEEN 0 AND 12) 
     AND (line_type='section_intro' OR line_type='question') 
ORDER BY line_order;

Полагаю, все сводится к тому, выберет ли первая более 12 записей, а затем уйдет оттуда.

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

Нет, порядок не имеет значения. Оптимизатор запросов собирается оценивать все условия отдельно и выбирать оптимальный порядок на основе применимых индексов / размера целевого выбора / и т. Д. *

0 голосов
/ 08 октября 2009

Это зависит от ваших показателей. Если у вас есть мультииндекс на (line_type, line_order), первый запрос выполняется быстрее. Если у вас есть индекс на (line_order, line_type), второй будет быстрее. Это связано с тем, что для многоколоночных первичных ключей MySQL может выполнять сравнения только по порядку. В противном случае нет никакой разницы.

HTH -

Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...