布尔语句的顺序对MySQL查询的性能有影响吗?

布尔语句的顺序对MySQL查询的性能有影响吗?,sql,mysql,performance,Sql,Mysql,Performance,假设我想基于多个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 BETWE

假设我想基于多个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条以上的记录,然后从中进行缩减。

不,顺序无关紧要。查询优化器将分别评估所有条件,并根据适用的索引/目标选择的大小等决定最佳顺序。

这取决于您的索引。如果你有一个多索引(行类型,行顺序),第一个查询会更快。如果在(行顺序、行类型)上有索引,则第二个索引速度更快。这是因为对于多列主键,MySQL只能按顺序进行比较。否则,没有区别

嗯-


克里斯

太好了,这是我的想法,但我想知道这一点会很好,以备将来参考。谢谢这是不正确的。两个查询在任何一个索引上都是完全相同的;哪一个索引将使查询执行得更快取决于表/索引中有多少匹配行。例如,如果表中所有(或绝大多数)行的
line\u type
设置为
section\u intro
question
,则根本不会使用(line\u type,line\u order)上定义的索引。