假设我想基于多个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个记录,然后从那里减去。
答案 0 :(得分:2)
不,订单无关紧要。查询优化器将分别估计所有条件,并根据适用的索引/目标选择的大小等决定最佳顺序......
答案 1 :(得分:0)
这取决于您的索引。如果你有一个多索引(line_type,line_order),第一个查询会更快。如果你有一个索引(line_order,line_type),第二个更快。这是因为对于多列主键,MySQL只能按顺序进行比较。否则,没有区别。
HTH -
克里斯