Ich habe eine große Abfrage, die ich einstellen möchte. Ich schreibe viele Abfragen, habe aber nicht viel abgestimmt. Ich habe einen Screenshot von SQL Sentry Plan Explorer Free (SSPEF) beigefügt:
Im obigen Teil des Plans enthält die Tabelle pb_WorkRquestLog 229.001 Zeilen. Der Abfrageplan zeigt jedoch ca. 348 Millionen Zeilen (229.001 x 1.520 Iterationen):
Da es keine where-Klausel gibt, verwendet die Abfrage einen Clustered Index Scan. Ich habe alle Indizes mit FULLSCAN neu erstellt und alle Statistiken aktualisiert.
Der Code, den dieser Teil des Plans ausführt, lautet:
select distinct
wrs.ServiceKey
, owner.DepartmentName AS GroupName
, owner.UserName AS UserId
, owner.WRLCreateDateTime
, owner.WRLNotes
, wrx.CreatedDate as WRCreateDateTime
, wrx.Id
, wrx.Description
, cast(wrx.Notes as varchar(2500)) as Notes
from
prism72ext.dbo.pb_WorkRequestService wrs
Join prism72ext.dbo.pb_WorkRequest wrx on (wrs.WorkRequestId = wrx.Id and wrx.Status = 'Incomplete')
left join (
select
wl.WorkRequestId
, d.Name AS DepartmentName
, u.UserName
, wl.CreatedDate as WRLCreateDateTime
, cast(wl.Notes as varchar(2500)) as WRLNotes
from
(
SELECT
MAX( Id ) AS Id
FROM
prism72ext.dbo.pb_WorkRequestLog WITH(INDEX(0))
GROUP BY
WorkRequestId
) mwl
join prism72ext.dbo.pb_WorkRequestLog wl on mwl.Id = wl.Id
join prism72Ext.dbo.pb_Department d ON wl.DepartmentId = d.DepartmentId
left join prism72Ext.dbo.pb_User u on wl.UserId = u.UserId
) owner on wrs.WorkRequestId = owner.WorkRequestId
SSPEF meldet, dass die tatsächliche Datengröße bei 5 Millionen logischen Lesevorgängen fast 5 GB beträgt! SSMS meldet, dass die Tabelle nur 16 MB groß ist.
Ich habe die Abfrage von 4m28s auf 1m35s reduziert, aber jetzt stecke ich fest. Ich wäre dankbar, wenn mich jemand in die richtige Richtung weisen könnte, um damit umzugehen.
Bearbeiten: Jemand schlug vor, "OPTION (HASH JOIN, MERGE JOIN)" zu versuchen. Dies machte einen dramatischen Unterschied. Die E / A wurde massiv reduziert und die Abfrage wurde in 13 Sekunden ausgeführt.
Hat jemand Probleme mit dieser Lösung?