我想知道是否有有关顺序的规则 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查询优化器.
(我错了)

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top