Ich habe vor einiger Zeit von einem DBA-Freund einen Trick gelernt, um bestimmte SQL-Abfragen zu beschleunigen. Ich erinnere mich, dass er erwähnt hat, dass es etwas damit zu tun hat, wie SQL Server die Abfrage kompiliert und dass der Abfragepfad gezwungen ist, den indizierten Wert zu verwenden.Warum beschleunigt dies meine SQL-Abfrage?
Hier ist meine ursprüngliche Abfrage ist (dauert 20 Sekunden):
select Part.Id as PartId, Location.Id as LocationId
FROM Part, PartEvent PartEventOuter, District, Location
WHERE
PartEventOuter.EventType = '600' AND PartEventOuter.AddressId = Location.AddressId
AND Part.DistrictId = District.Id AND Part.PartTypeId = 15
AND District.SubRegionId = 11 AND PartEventOuter.PartId = Part.Id
AND PartEventOuter.EventDateTime <= '4/28/2009 4:30pm'
AND NOT EXISTS (
SELECT PartEventInner.EventDateTime
FROM PartEvent PartEventInner
WHERE PartEventInner.PartId = PartEventOuter.PartId
AND PartEventInner.EventDateTime > PartEventOuter.EventDateTime
AND PartEventInner.EventDateTime <= '4/30/2009 4:00pm')
Hier wird die "optimierte" Abfrage ist (weniger als 1 Sekunde):
select Part.Id as PartId, Location.Id as LocationId
FROM Part, PartEvent PartEventOuter, District, Location
WHERE
PartEventOuter.EventType = '600' AND PartEventOuter.AddressId = Location.AddressId
AND Part.DistrictId = District.Id AND Part.PartTypeId = 15
AND District.SubRegionId = 11 AND PartEventOuter.PartId = Part.Id
AND PartEventOuter.EventDateTime <= '4/28/2009 4:30pm'
AND NOT EXISTS (
SELECT PartEventInner.EventDateTime
FROM PartEvent PartEventInner
WHERE PartEventInner.PartId = PartEventOuter.PartId
**AND EventType = EventType**
AND PartEventInner.EventDateTime > PartEventOuter.EventDateTime
AND PartEventInner.EventDateTime <= '4/30/2009 4:00pm')
im Detail, warum das jemand erklären, läuft so viel schneller? Ich versuche nur, das besser zu verstehen.
Haben Sie versucht, den Abfrageplan zu betrachten? –
Weil es einen Index für den Ereignistyp gibt? –
Haben Sie keinen Index für dieses Feld? –