Was geschieht auf der SQL Server-Engine-Seite, wenn ich einen Index aus einer meiner Tabellen lösche?Was passiert, wenn ein Nonclustered-Index gelöscht wird?
Details: Ich habe eine Datenbank in Produktion.
In dieser Datenbank habe ich eine Abfrage, die regelmäßig Deadlocks erstellt. Ich habe die Abfrage gefunden, die den Deadlock erzeugt, habe ihn auf meinem Computer ausgeführt und den Ausführungsplan angezeigt. SQL Server Management Studio schlägt vor, einen Index für eine bestimmte Tabelle hinzuzufügen.
Der Index ist sinnvoll für mich, aber mein Problem ist, dass ich auf dieser Tabelle bereits 3 Indizes habe und, ehrlich gesagt, kann ich nicht sicher sein, ob sie richtig verwendet werden oder ob sie für eine bestimmte erstellt wurden Rolle.
Ich könnte einfach einen weiteren Index auf dem Tisch hinzufügen, aber ich bin besorgt über die Kosten, die ich jedes Mal zahlen werde, wenn ich Daten auf dem Tisch hinzufüge/aktualisiere/lösche.
Ich habe ein paar Versuche auf meiner Maschine gemacht und es scheint, dass ich mindestens zwei andere Indizes löschen muss, damit die Engine den Index auswählt, den ich heute erstelle (sieht komisch aus). Sobald ich die Engine zwinge, meinen Index zu übernehmen (weil ich alles andere gelöscht habe), läuft die Abfrage zehnmal schneller ab.
Kann ich einfach den DROP Index
Befehl ohne viel Problem verwenden? Ich muss nicht umbauen oder irgendetwas?
Sie können nutzlose Indizes löschen, aber Sie können auch einen Abfragehinweis zu [SQL-Server erzwingen, einen bestimmten Index zu verwenden] hinzufügen (https://blog.sqlauthority.com/2009/02/08/sql-server-introduction -to-force-index-abfrage-hinweise-index-hinweis-part2 /) –
Erinnert mich an diese jüngsten [@TrumpDBA] (https://twitter.com/TrumpDBA/status/826154547299151872) Tweet –