Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server是否自动放弃不必要的联接?_Sql Server_Sql Server 2005_Query Optimization - Fatal编程技术网

Sql server SQL Server是否自动放弃不必要的联接?

Sql server SQL Server是否自动放弃不必要的联接?,sql-server,sql-server-2005,query-optimization,Sql Server,Sql Server 2005,Query Optimization,如果我向SQLServer2005提交一个查询,其中包含许多左联接子句,而被联接的表则从未被引用,那么联接是否仍然会发生,或者SQLServer是否足够智能,可以丢弃它们 显然,它不能放弃内部联接[错误假设!请参见答案],因为这可能会改变结果,但它能为左联接做到这一点吗?如果存在许多匹配项,左联接可能会使结果集相乘 因此,它仍然会被计算。如果有许多匹配项,左连接可能会使结果集相乘 因此,它仍然会被评估。它可以通过检查约束来放弃内部联接和左侧联接。如果不在表中使用列,并且有一个保证单行存在的(FK

如果我向SQLServer2005提交一个查询,其中包含许多左联接子句,而被联接的表则从未被引用,那么联接是否仍然会发生,或者SQLServer是否足够智能,可以丢弃它们


显然,它不能放弃内部联接[错误假设!请参见答案],因为这可能会改变结果,但它能为左联接做到这一点吗?

如果存在许多匹配项,左联接可能会使结果集相乘


因此,它仍然会被计算。

如果有许多匹配项,左连接可能会使结果集相乘


因此,它仍然会被评估。

可以通过检查约束来放弃内部联接和左侧联接。如果不在表中使用列,并且有一个保证单行存在的(FK)约束,则不需要使用该表。显然,这取决于查询,表可能仍然会被使用,因为它是最好的计划


这是约束比设计中的约束更常见的另一个原因。

可以通过检查约束来放弃内部联接和左侧联接。如果不在表中使用列,并且有一个保证单行存在的(FK)约束,则不需要使用该表。显然,这取决于查询,表可能仍然会被使用,因为它是最好的计划


这是另一个原因,即设计中的约束比设计中的约束更常见。

当然;我没想到,谢谢。如果我添加了一个DISTINCT(可能没有那么糟糕,因为我只选择了一个表的主键),它会优化左侧联接吗?最简单的方法是尝试一下。看看有没有加入的执行计划。谢谢你的提示;在我的具体案例中,即使没有DISTINCT,SQL Server也能够优化所有不需要的左连接。我猜它能够从表上现有的约束和唯一的索引推断出每个连接永远不会有多个匹配项;我没想到,谢谢。如果我添加了一个DISTINCT(可能没有那么糟糕,因为我只选择了一个表的主键),它会优化左侧联接吗?最简单的方法是尝试一下。看看有没有加入的执行计划。谢谢你的提示;在我的具体案例中,即使没有DISTINCT,SQL Server也能够优化所有不需要的左连接。我想它能够从表上的现有约束和唯一索引推断出每个连接永远不会有多个匹配项。感谢您的深入了解,我编辑了这个问题以突出我的错误假设,供未来读者阅读。感谢您的深入了解,我编辑了这个问题以突出我的错误假设,供未来读者阅读。