MySQL:子句的顺序

MySQL查询子句的顺序是否会影响效率?例如

SELECT * 
  FROM TABLE AS t
 WHERE t.Employee_id = 1
   AND t.payout > 500

VS.

SELECT * 
  FROM TABLE AS t
 WHERE t.payout > 500
   AND t.Employee_id = 1

另外,如果t.Employee_id被索引,而t.payout不被索引怎么办?

最佳答案 如果算术允许的话,sql中所有内容的顺序都会被查询规划器重新排序.这包括AND,OR,内部联接,外部联接的一些情况等.它还可以重新组织IN语句,不需要的子查询等.

所以是的,它会找到你正确的索引等.

小心不要让它在你的脸上爆炸.例如,这句话:

 select y <> 0 and (x / y) > 0;

在C语言中永远不会出现问题,但在SQL中,计划者可以完全自由地首先评估右侧并通过零错误阻塞除法.

如果要强制执行订单,则需要使用case语句:

 select case when y <> 0 then (x / y) > 0 else false end;

最后一点:对于充满连接和子查询的大量查询,规划人员通常会遇到阈值,超过这些阈值,他们不再尝试每个可能的计划,并使用遗传算法达到足够好的查询.当他们这样做时,连接顺序等确实有效.

点赞