Warum dauert ein UPDATE viel länger als ein SELECT?

8

Ich habe die folgende Select-Anweisung, die fast sofort beendet wird.

%Vor%

Die äquivalente Aktualisierungsanweisung benötigt jedoch 1m40s

%Vor%

Auch wenn ich hinzufügen:

%Vor%

am Ende der update-Anweisung, die die Anzahl der Schreibvorgänge auf Null reduziert, dauert es genauso lange.

Mache ich hier etwas falsch? Warum gibt es so einen großen Unterschied?

    
Nodja 05.01.2010, 22:36
quelle

4 Antworten

21
  • Transaktionsprotokolldatei schreibt
  • Indexaktualisierungen
  • Fremdschlüssel-Lookups
  • Fremdschlüsselkaskaden
  • indizierte Sichten
  • berechnete Spalten
  • überprüfen Einschränkungen
  • sperrt
  • verriegelt
  • Sperreskalation
  • Snapshot-Isolation
  • DB-Spiegelung
  • Dateiwachstum
  • andere Prozesse lesen / schreiben
  • Seite spaltet / ungeeigneter gruppierter Index
  • Vorwärtszeiger / Zeilenüberlaufereignisse
  • schlechte Indizes
  • Statistiken veraltet
  • schlechtes Festplattenlayout (zB ein großes RAID für alles)
  • Überprüfen Sie Einschränkungen mit UDFs, die über Tabellenzugriff verfügen
  • ...

Obwohl der übliche Verdächtige ein Auslöser ist ...

Auch Ihre zusätzliche Bedingung hat keine Bedeutung: Wie kann SQL Server dies ignorieren? Ein Update wird immer noch mit dem größten Teil des Gepäcks generiert ... selbst der Auslöser wird weiterhin ausgelöst. Sperren müssen gehalten werden, während Zeilen nach den anderen Bedingungen gesucht werden, z. B.

Bearbeitet Sep 2011 und Feb 2012 mit mehr Optionen

    
gbn 05.01.2010, 22:41
quelle
6

Das Update muss die Daten in der Tabelle sperren und ändern sowie die Änderungen im Transaktionslog protokollieren. Die Auswahl muss keines dieser Dinge tun.

    
Ray 05.01.2010 22:39
quelle
1

Weil das Lesen keine Auswirkungen auf Indizes, Trigger und was hat Sie?

    
Hamish Grubijan 05.01.2010 22:39
quelle
1

In langsamen Servern oder großen Datenbanken verwende ich normalerweise UPDATE DELAYED, das auf eine "Pause" wartet, um die Datenbank selbst zu aktualisieren.

    
user1391670 15.05.2012 23:21
quelle