-
16-10-2019 - |
题
我想知道是否有有关顺序的规则 INNER JOIN
在T-SQL 2000中。
当我 INNER JOIN
那样的作用是放置在滤镜上而不是末端。
参考 http://sql-4-life.blogspot.com/2009/03/order-of-inner-joins.html
解决方案
最佳序列(查询计划)由查询执行程序确定,基于SQL代码(您使用的运营商),数据统计信息(列,数据卷等值的统计分布)和数据库结构(索引,索引的可用性,数据类型等)。因此,有一些规则,但首先,并不是所有人都在您的全部控制之下,其次,结果是由许多因素组合来确定的。
为了评估性能,您应该始终查看估计的查询计划,并将更改与SQL代码更改引起的计划进行比较,以承担为什么查询比另一个更快或更慢的查询。
其他提示
您编写的订单无关紧要。大多数(如果不是全部)优化器(以及SQL-Server的Optimizer)都知道 JOIN
是联想和交换性的。
找到最佳的执行计划(这意味着加入订单,加入算法,每次加入,使用索引选择等),这是一个非常困难的问题,这正是构建的查询优化者可以解决的,它们使用了各种复杂的启发式方法和技术。但是,除非(也许)作为起点,否则我们在查询中编写的连接的顺序尚未考虑。
选择(可能数百万或数万亿)订购联接的方式之间的选择远非微不足道。这就像被扔在一个地形的地形上,到处都是山峰和无底坑,目的是找到最低点。起始位置对这一任务的影响可以忽略不计,除了在非常复杂的查询中,优化器显然无法考虑所有可能的计划。
如果我没错, 模拟退火 是使用的启发式方法之一 SQL Server查询优化器.(我错了)
不隶属于 dba.stackexchange