Problemlose Möglichkeit, einen Clustered-Index für eine große Tabelle zu erstellen?

22

Wir haben also eine Kundenseite, die sich über eine ernsthaft schwache Leistung beschwert. Ich habe einen Blick darauf geworfen , und es ist offensichtlich, dass das Problem darin besteht, dass jemand anderes (grrrr) eine Tabelle mit mehr als 20 Millionen Datensätzen ohne Clustered-Index erstellt hat.

Jetzt möchte ich einen Clustered-Index für diese Tabelle erstellen. In meiner Testumgebung wird mein create indexBefehl jedoch seit einer Stunde ausgeführt und wird immer noch nicht ausgeführt. Der Kundenstandort ist eine Werkstatt, die rund um die Uhr arbeitet und sich keine Stunde Ausfallzeit leisten kann, während ich einen Index erstelle.

Gibt es eine weniger gewaltsame Methode zum Erstellen des Indexes, mit der der Job entweder schnell beendet wird oder die die Leistung des Servers nicht vollständig beeinträchtigt, wenn er ausgelastet ist?

Wir verwenden SQL Server Enterprise Edition.

Shaul sagt, ich unterstütze Monica
quelle

Antworten:

26
  • Wenn Ihr SQL Server Enterprise + Edition ist und die Tabelle keine BLOB-Felder enthält - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • Andernfalls können Sie die Tabelle nur mit demselben Schema erstellen und klugerweise Daten einschließlich aller INSERT / UPDATE / DELETE-Vorgänge (z. B. mit dem Trigger) darauf übertragen. Löschen Sie anschließend die alte Tabelle und benennen Sie sie um neu mit dem gleichen Namen wie alt - Nachteile sind: langsam, erhöht die Server- und Speicherlast

Oleg Dok
quelle
12

Sie sind sich nicht sicher, welche Version von SQL Server Ihr Kunde verwendet. In Unternehmen können Sie den Index mit (ONLINE = ON) erstellen, sodass die Tabelle verfügbar ist, bis der Index erstellt wurde.


quelle
8
  • Erstellen Sie eine neue Tabelle, die mit dem Original identisch ist (offensichtlich wird ein anderer Name benötigt).
  • Erstellen Sie einen Clustered-Index für eine neue Tabelle
  • Laden Sie die Daten in eine neue Tabelle
  • Legen Sie den ursprünglichen Tisch ab
  • Benennen Sie die neue Tabelle mit dem ursprünglichen Namen um

Stellen Sie sicher, dass Sie alle Berechtigungen anwenden, die vom Original benötigt wurden.

Bryan
quelle