同じことを行う2つのSQL問合せがあり、最初の問合せでは13秒、実行には1秒かかります。理由は何ですか? ProcessMessagesでSQL結合の実行が遅い
ない必要なすべてのIDはProcessMessageDetails
内のデータを持っています -
Select * from dbo.ProcessMessageDetails
where ProcessMessageId in (Select distinct ProcessMessageId from dbo.ProcessMessages t1
Where Where Id = 4 and Isdone = 0)
Iを実行するために秒の下
Select * from dbo.ProcessMessages t1
join dbo.ProcessMessageDetails t2 on t1.ProcessMessageId = t2.ProcessMessageId
Where Id = 4 and Isdone = 0
--takesを実行するために13秒かかりますt1.processMessageId(Pk)にclusterdインデックス、t2.processMessageId(FK)にnon clusterdインデックスを持つ
idとisdoneソースはどのテーブルからですか? Additinoally 1番目のものでは1-M joinが解決されていますが、2番目のエンジンではテーブルに参加する必要はありません。 – xQbert
IdとIsdoneはdbo.ProcessMessages t1から供給されています。 IdとIsDone用に非クラスタ化インデックスを作成しました – user1005310
実行計画を追加できますか? – Naruto