ストアドプロシージャの1つでボトルネックと思われるものが見つかりました。 @Resultsは〜17K行のテーブル変数です。これには、TimeStamp(DateTime)列とValue(decimal)列が含まれます。関連するサブクエリのパフォーマンス
相関サブクエリのアプローチは、このタスクを達成するために私が考えることができる最初のものでしたが、パフォーマンスはで非常に悪いです。私は同じテーブルに対して相関サブクエリを使用してWHERE句を "計算"する以外に、このクエリを構造化するより良い方法を考えることはできません。どのようにこれをより良い方法で書くことができるかに関するアドバイス...
私は基本的に完全な結果のサブセットから最高値を選択しようとしています。今度は、結果レコードは、その値以下であるすべての値を数え、100を掛けて、それを@Countで割って、それが数パーセントより大きいかどうかを調べることによって、サブセットに含まれます。ここで
は、クエリです:
SELECT TOP 1 @Result = Results.Value
FROM @Results Results
WHERE (100.0 * (SELECT COUNT(1)
FROM @Results Results2
WHERE Results2.Value <= Results.Value)/@Count) >= @Percent
ORDER BY Results.Value ASC
何かアドバイスや支援をいただければ幸いです。
ありがとうございます!
いいえ、Results.Valueにはインデックスがありません。結果はテーブル変数です。テーブル変数にインデックスを追加できますか? –
PRIMARY KEYまたはUNIQUE制約を最初に作成したときに宣言しない限り、次のように見えます。http://sqlserverplanet.com/sql/create-index-on-table-variable - オプションでない場合は、おそらく最初に '@ temp'を'#tempResults'テーブルに格納する必要があります。 –