尝试删除我所拥有的查询(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
我应该创建另一个包含列的索引来解析嵌套循环吗?
答案 0 :(得分:0)
这些查询是分开还是被加入?
在查询1中,如果您要单独根据TxnDate进行选择,则应该在该列上放置非聚集索引。
嵌套循环并不总是坏事。根据您使用的套装的大小,它们可以是最佳的。你觉得Merge或Hash加入会有更好的结果吗?