布尔语句的顺序是否会在MySQL查询中产生性能差异?

时间:2009-10-07 22:34:37

标签: 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 BETWEEN 0 AND 12) 
     AND (line_type='section_intro' OR line_type='question') 
ORDER BY line_order;

我想它会归结为第一个是否会选择超过12个记录,然后从那里减去。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

HTH -

克里斯