gpt4 book ai didi

VS 上的 sql INNER JOIN 表变量。内部连接(选择)开启

转载 作者:行者123 更新时间:2023-12-04 18:30:35 26 4
gpt4 key购买 nike

我想知道使用表变量是否比使用内部联接(选择)的性能更高或更低
示例:

DECLARE @tab TABLE(Id int)  
INSERT INTO @tab
SELECT Id
FROM SomeTable
WHERE SomeDate = "10 DAYS AGO"

SELECT *
FROM SomeOtherTable
INNER JOIN @tab t
ON SomeOtherTable.id = t.id

--VERSUS--

SELECT *
FROM SomeOtherTable
INNER JOIN (SELECT Id FROM SomeTable WHERE SomeDate = "10 DAYS AGO") t
ON SomeOtherTable.id = t.id

对于大型查询,如果您必须多次进行相同的连接,第一个更易于维护,但什么是最高性能的?

问候

最佳答案

SQL Server 不维护表变量的详细统计信息或自动重新编译以反射(reflect)更细粒度的基数信息更改(没有 TF 2453),因此通常会假设它们输出单行。

这意味着有时您会得到一个次优的加入策略。第二个版本可以使用统计信息,也避免了将中间结果插入临时对象的开销。

但是,如果第二个查询的评估成本很高,因为 SomeDate 未编入索引,您可能会通过预先具体化来提高性能(与反复重新评估相比)。

您还可以考虑使用 #temp 表,因为这样可以避免统计问题。 Some people suggest never using a table variable in JOINs

关于VS 上的 sql INNER JOIN 表变量。内部连接(选择)开启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7724092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com