時々動作が遅くなるアプリケーションがありますが、これはデータベース カーソルに関連していると思います。
アプリケーション ソースにアクセスできないため、データベース呼び出しを制御できませんが、データベースは開いているので、必要に応じてインデックスを追加できます。
問題は、インデックスを使用してカーソルを高速化する方法を本当に知らないことです。
カーソルクエリは単純で、次のようになります
SELECT * FROM table WHERE field1=1 AND field2=2 ORDER BY field3, field4
(テーブルには約 1M 行が含まれます。左結合が 1 つある場合もあります)
SSMS でクエリを直接実行すると 1 秒もかかりませんが、アプリケーションからカーソルで実行すると、最初の行を取得するのに 30 秒かかる場合があります (sql-trace で確認)。
WHERE 句と ORDER BY 句のフィールドはすべて個別にインデックスが作成されます。
field1、field2、field3、field4 のインデックスを組み合わせると、より高速になると思います。フィールドの組み合わせと順序ごとにインデックスを作成せずに高速化する方法はありますか?
(繰り返しますが、アプリケーションがデータベースにアクセスする方法には影響しません。パフォーマンスは、インデックスを介してのみ調整できます)