0

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

TxnID bigint CustID bigint col1 varchar(4) col2 varchar(4) col3 varchar(4) TxnCurrency char(3) TxnAmt money TxnDate datetime

-- 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 上有非聚集索引

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

4

1 回答 1

0

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

在查询 1 中,如果您要单独基于 TxnDate 进行选择,您可能应该在该列上放置一个非聚集索引。

嵌套循环并不总是一件坏事。根据您正在使用的集合的大小,它们可能是最佳的。您认为使用 Merge 或 Hash join 会看到更好的结果吗?

于 2010-01-06T03:14:56.820 回答