Ich habe an einer alten überwachten gespeicherten Prozedur gearbeitet, die langsam ausgeführt wird. Ich habe einige Erfolge beim Anwenden der Indizierung und der Sargable-Abfrage der Abfrage erzielt.SQL-Leistung langsam (Verbessert Einfügen in Temp-Tabelle)
Die gespeicherte Prozedur dauert jedoch immer noch über eine Minute. Ich denke, das Problem liegt in der Temp-Tabelle einfügen. Ich habe versucht, einen Index zu der temporären Tabelle anzuwenden, aber dies wird nur die Leistung reduzieren, wie:
Die Anzahl der Indizes auf einer Tabelle der dominierende Faktor für Einfügeleistung ist. Je mehr Indizes eine Tabelle hat, desto langsamer wird die Ausführung. Die INSERT-Anweisung ist die einzige Operation, die nicht direkt von der Indexierung profitieren kann, da sie eine Nirgendwo-Klausel enthält.
SQL-Code
Ich habe unter dem Code-Schnipsel aus dem Audit-Verfahren veröffentlicht, der die längste Zeit nimmt den Ausführungsplan zu verarbeiten und zu enthalten.
SELECT dbo.[Audit Result Entry Detail].PK_ID,
dbo.[Audit Result Entry Detail].......
45-50 other columns selected from Audit Result Entry Detail
(Note i need to select all these)
dbo.[Audit Register].Audit_Date,
dbo.[Audit Register].Audit_Type,
dbo.[Audit Register].ContextUser
INTO #temp5
FROM dbo.[Audit Result Entry Detail]
INNER
JOIN dbo.[Audit Register]
ON dbo.[Audit Result Entry Detail].FK_RegisterID = dbo.[Audit Register].PK_ID
INNER
JOIN (
SELECT MAX(Audit_Date) AS DATE,
FK_RegisterID
FROM dbo.[Audit Result Entry Detail]
INNER
JOIN dbo.[Audit Register]
ON dbo.[Audit Result Entry Detail].FK_RegisterID = dbo.[Audit Register].PK_ID
WHERE Audit_Date >= @StartDate AND Audit_Date < DATEADD(dd,1,@EndDate)
--WHERE ((SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, Audit_Date))) >= @StartDate
-- AND (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, Audit_Date))) <= @EndDate)
AND part_number = @ParticipantNumber
GROUP
BY FK_RegisterID
) dt
ON dbo.[Audit Result Entry Detail].FK_RegisterID = dt.FK_RegisterID
AND dbo.[Audit Register].Audit_Date = dt.[date]
WHERE part_number = @ParticipantNumber
Ich glaube, der Engpass der Tabelle # Temp5 ist, meine Frage ist, ihr eine Art, wie ich in die temporäre Tabelle den Einsatz beschleunigen kann, oder gibt es eine bessere Alternative zu einer temporären Tabelle?
Danke für Ihre Hilfe.
Bitte geben Sie den Link zum Ausführungsplan statt als Bild – TheGameiswar
Leistungsfragen sollten "EXPLAIN ANALYSE" und einige Informationen über Tabellengröße, Index, aktuelle Zeit Leistung, Wunschzeit usw. enthalten. Langsam ist ein relativer Begriff und wir brauchen ein echter Wert zum Vergleichen. –
Ausführungsplan zeigt das Einfügen von Daten in temporäre Tabelle dauert 41% der Gesamtzeit. Also dachte ich, es fügt eine große Anzahl von Zeilen in die temporäre Tabelle ein, aber es sieht so aus, als hätte das Endergebnis nur 3462 Zeilen. Kann mir das jemand erklären? Vielen Dank – FLICKER