sql执行计划嵌套循环

时间:2010-01-05 23:32:36

标签: sql-server sqlperformance

尝试删除我所拥有的查询(mssql 2005)的执行计划中的嵌套循环。有下表:

TxnID bigint CustID bigint col1 varchar(4) col2 varchar(4) col3 varchar(4) TxnCurrency char(3) TxnAmt钱 TxnDate日期时间

-- query 1
SELECT CustID, TxnCurrency, SUM(TxnAmt) AS TxnAmt
FROM   table
WHERE  TxnDate >= @date1 and TxnDate < @date2
       and col1 IN ( @list )
       and col2 = @param
GROUP BY CustID, TxnCurrency

-- query 2
SELECT TxnCurrency, SUM(TxnAmt) AS TxnAmt
FROM   table
WHERE  TxnDate >= @date1 and TxnDate < @date2
       and CustID = @custID
GROUP BY TxnCurrency

TxnID是主键,在CustID上有非聚集索引,TxnDate

我应该创建另一个包含列的索引来解析嵌套循环吗?

1 个答案:

答案 0 :(得分:0)

这些查询是分开还是被加入?

在查询1中,如果您要单独根据TxnDate进行选择,则应该在该列上放置非聚集索引。

嵌套循环并不总是坏事。根据您使用的套装的大小,它们可以是最佳的。你觉得Merge或Hash加入会有更好的结果吗?