SQL问题:WHERE子句的顺序有何作用?

前端之家收集整理的这篇文章主要介绍了SQL问题:WHERE子句的顺序有何作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
性能的角度来看,我的sql WHERE语句的顺序是否有所不同?

例如

SELECT ... FROM ...
WHERE a > 1
AND b < 2

这会比任何更快/更慢

SELECT ... FROM ...
WHERE b < 2
AND a > 1

我们还假设我事先知道一个> 1将缩小结果集.

而且,如果我加入了两个或多个表,那么WHERE语句的顺序呢?

解决方法

理论上没有区别.

偶尔,特别是使用更简单的优化器,查询计划有所不同,具体取决于WHERE子句中子句的顺序.有一个中等强度的论点,这种差异是一个bug的症状.

类似的评论也适用于加入订单.连接的顺序不要紧,因为连接类型相同.显然,表Table2是否是内部连接或外部连接到另一个表Table1是重要的 – 无论是Table1 LEFT JOIN Table2还是Table1 RIGHT JOIN Table2或Table1 FULL JOIN Table2.但是对于一系列INNER JOIN操作来说,顺序并不重要.处理顺序可能在某种程度上被强制,如果你正在处理一连串的连接.

澄清(再次) – 考虑:

(Table1 AS t1 JOIN Table2 AS t2 ON t1.pkcol = t2.fkcol) AS j1
JOIN
(Table3 AS t3 JOIN Table4 AS t4 ON t3.pkcol = t4.fkcol) AS j2
ON j1.somecol = j2.anothercol

写的方式,程序员期望连接(t1,t2)和(t3,t4)在连接(j1,j2)之前执行,但优化器可能能够以不同的方式进行连接.例如,如果j1.somecol派生于Table1,而j2.anothercol派生于表4中,则优化器可能可以选择Table1.SomeCol = Table4.AnotherCol上的任何其他连接中的连接.这种问题可能会受到WHERE子句中的过滤条件以及各种表中存在或不存在适当索引的影响.统计数据可以在优化器生成查询计划的方式中发挥重要作用.

原文链接:https://www.f2er.com/mssql/81887.html

猜你在找的MsSQL相关文章