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 のみに基づいて選択する場合は、おそらくその列に非クラスター化インデックスを配置する必要があります。

ネストされたループは必ずしも悪いことではありません。作業しているセットのサイズによっては、それらが最適な場合があります。マージまたはハッシュ結合を使用すると、より良い結果が得られると思いますか?

于 2010-01-06T03:14:56.820 に答える