Für Argumente, sagen wir, es ist für SQL 2005/8. Ich verstehe, dass wenn Sie Indizes für eine Tabelle setzen, um SELECT
Anweisungen abzustimmen, diese Indizes während INSERT
/UPDATE
/DELETE
Aktionen beibehalten müssen.Wann verwaltet MS-SQL Tabellenindizes?
Meine Hauptfrage ist diese:
Wann wird SQL Server Indizes einer Tabelle halten?
ich viele nachfolgende Fragen:
Ich gehe davon aus, dass es naiv so tun wird, nachdem ein Befehl ausgeführt wurde. Angenommen, Sie fügen 20 Zeilen ein, wird der Index beibehalten, nachdem 20 Zeilen eingefügt und festgeschrieben wurden.
Was in der Situation passiert, wo ein Skript mehrere Anweisungen gegen eine Tabelle verfügt, sind aber ansonsten eindeutige Aussagen?
Hat der Server die Intelligenz den Index zu halten, nachdem alle Anweisungen ausgeführt werden oder es es tut pro Aussage?
Ich habe Situationen erlebt, in denen Indizes gelöscht werden und neu erstellt, nachdem groß/viele INSERT
/UPDATE
Aktionen.
Das vermutlich verursacht Wiederaufbau die Indizes der gesamten Tabelle, auch wenn Sie nur eine Handvoll Zeilen ändern?
Würde ein Leistungsvorteil bei dem Versuch, es zu sammeln
INSERT
undUPDATE
Aktionen in eine größere Charge, sagen durch Reihen zu sammeln in einer temporären Tabelle einzufügen, im Gegensatz zu viele kleineren Einsätze zu tun?- Wie wäre es, wenn die oben stehenden Zeilen verglichen werden, statt einen Index fallen zu lassen, statt den Wartungstreffer zu nehmen?
- Ein Index schweren Tisch abgestimmt für wählt.
- Ein Index Leuchttisch (PK).
Sorry für die Verbreitung von Fragen - es ist etwas, von dem ich immer weiß, dass es bewusst ist, aber wenn ich versuche, ein Skript zu tunen, um ein Gleichgewicht zu finden, ich weiß nicht, wann Index Wartung auftritt.
Edit: Ich verstehe, dass Leistungsfragen weitgehend von der Menge der Daten während der Einfügung/Aktualisierung und der Anzahl der Indizes abhängen. Wiederum um Argumente willen, hätte ich zwei Situationen:
Beide Situationen hätten eine große Einfüge-/Aktualisierungsgruppe, z. B. 10k + Zeilen.
Bearbeiten 2: Ich bin mir bewusst, in der Lage, ein bestimmtes Skript auf einem Datensatz zu profilieren. Das Profiling sagt mir jedoch nicht, warum ein bestimmter Ansatz schneller ist als ein anderer. Ich interessiere mich mehr für die Theorie hinter den Indizes und wo Performance-Probleme auftreten, keine definitive Antwort "das ist schneller als das".
Danke.
Gute Frage. Für den zweiten Teil hängt es vollständig von der Anzahl und dem Inhalt der Indizes ab, ob es schneller fällt und neu erstellt oder nur über den Indizes aktualisiert wird. Wie die meisten Dinge in SQL gibt es keine Antwort oder Methode, die zu 100% korrekt ist. – JNK
@JNK Ich vermutete genauso viel, ich hoffe, jemand kann die Situation im Ballpark ablegen oder erklären, in welchen Situationen ein bestimmter Ansatz teuer wird. –