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子句中的过滤条件以及各种表中存在或不存在适当索引的影响.统计数据可以在优化器生成查询计划的方式中发挥重要作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |