完了するのに非常に長い時間がかかるSQLクエリ(SQL Server 2008 R2の場合)があります。もっと良い方法があるのだろうか?
SELECT @count = COUNT(Name)
FROM Table1 t
WHERE t.Name = @name AND t.Code NOT IN (SELECT Code FROM ExcludedCodes)
Table1には約9千万行が含まれており、名前とコードでインデックスが付けられています。ExcludedCodesには約30行しかありません。
このクエリはストアドプロシージャ内にあり、約40k回呼び出されます。プロシージャが完了するまでにかかる合計時間は、27分です。クエリする行数と回数が多いため、これが私の最大のボトルネックだと思います。それはそれをします。
したがって、これを最適化するための良い方法を知っているなら、それは大いにありがたいです!最適化できない場合は、27分でスタックしていると思います...
編集
に変更するNOT IN
とNOT EXISTS
、時間が10:59に短縮されたので、それだけで大きなメリットが得られます。以下に示すように、group byステートメントを実行しようとしますが、ストアドプロシージャを完全に書き直す必要があり、時間がかかる場合があります...(前に述べたように、SQLは得意ではありませんが、開始しています私に成長するために。^^)