Ich aktualisiere gerade eine Tabelle mit Millionen von Datensätzen. Es sind 4 Tage vergangen und die Abfrage wird noch ausgeführt.
Ich habe die Aktivitätsüberwachung überprüft und festgestellt, dass die Abfrage ausgeführt wird.
Im Ereignisprotokoll gibt es überhaupt keine Fehler.
Leistung weise:
- Tempdb in Festplatte A (850 GB freier Speicherplatz)
- Datenbankdatei auf Datenträger B (750 GB freier Speicherplatz)
- 16 GB RAM
Bitte schlagen Sie mir vor, was ich tun soll.
Die Abfrage
UPDATE
dbo.table1
SET
costPercentage = ISNULL(t2.PaymentIndex, 1.0),
t2.TopUp_Amt = (ISNULL(t2.PaymentIndex, 1.0) - 1.0)
* ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00),
Total_Tariff_Inc_t2 = ISNULL(t2.PaymentIndex, 1.0)
* ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00)
FROM
dbo.table2 t2
WHERE
LEFT(dbo.test1.procodet, 3) = LEFT(t2.ProviderCode, 3) COLLATE database_default
quelle
Ändern Sie zunächst die Abfrage in:
Wie in Jeff Modens erstem Beitrag in dieser Diskussion erwähnt , ist Ihre Anfrage der sehr ähnlich, die er vor dem "Halloween-Effekt" gewarnt hat.
Danach müssen diese LEFT-Ausdrücke indiziert werden. Die Antwort von gbn zeigt Ihnen, wie das geht.
quelle