Ich habe 2 SQL-Abfragen, die die gleiche Sache, erste Abfrage dauert 13 Sekunden, um auszuführen, während zweite dauert 1 Sekunde, um auszuführen. Irgendein Grund warum?SQL join läuft langsam
nicht notwendig, alle IDs in Process werden Daten in ProcessMessageDetails haben
- dauert 13 sec
Select * from dbo.ProcessMessages t1
join dbo.ProcessMessageDetails t2 on t1.ProcessMessageId = t2.ProcessMessageId
Where Id = 4 and Isdone = 0
--takes unter einer Sekunde auszuführen
Select * from dbo.ProcessMessageDetails
where ProcessMessageId in (Select distinct ProcessMessageId from dbo.ProcessMessages t1
Where Where Id = 4 and Isdone = 0)
I auszuführen Clustered Index auf t1.processMessageId (Pk) und nicht Clustered Index auf t2.processMessageId (FK)
von welchen Tabellen werden id und isdone bezogen? Nebenbei bemerkt, in der ersten Version wird ein 1-M-Join aufgelöst, während im zweiten Schritt die Engine nicht an den Tischen teilnehmen muss. – xQbert
ID und Isdone stammen aus dbo.ProcessMessages t1. Ich habe einen nicht gruppierten Index für Id und IsDone erstellt – user1005310
Können Sie einen Ausführungsplan hinzufügen? – Naruto