同僚から、クエリの実行時間が非常に長いため、いくつかのテーブルのインデックス作成を調べるように依頼されました。1時間以上。
select count(1)
from databaseA.dbo.table1
inner join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)
異なるデータベースに注意してください。これは DatabaseB から実行されていました
テーブル 1 と 2 は、200 万を超えるレコード長でした。Table3 には 10 ほどのレコードがありました。
クエリ プランを調べたところ、オプティマイザは、Table3 を駆動テーブルとして、テーブル 1 と 2 へのネスト ループ インデックス シークを実行することにしました。
私の最初の仮定は、Tables1 と 2 で統計がひどく台無しになっているということでしたが、統計を更新する前に、次のように結合ヒントを追加しようとしました。
select count(1)
from databaseA.dbo.table1
inner HASH join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)
結果は 15 秒で返されました。
時間がなかったので、結果を彼に返しましたが、これが後で問題になるのではないかと心配しています.
統計の問題を再検討して、その方法で問題を解決する必要がありますか? 別のデータベースからの結合が原因で、不適切なクエリ プランが発生した可能性はありますか?
あなたの経験に基づいて誰かが私にいくつかのアイデアを提供できますか?