Ich sehe ständig Leute sagen, dass Indizes langsamer werden update
, delete
und insert
. Dies wird als pauschale Aussage verwendet, als ob es ein absolutes ist.
Während ich meine Datenbank optimiere, um die Leistung zu verbessern, stoße ich immer wieder auf eine Situation, die dieser Regel logisch zu widersprechen scheint, und nirgendwo kann ich jemanden finden, der etwas anderes sagt oder erklärt.
In SQL Server, und ich glaube, die meisten anderen DBMS, werden Ihre Indizes basierend auf bestimmten von Ihnen angegebenen Spalten erstellt. Einfügungen und Löschungen wirken sich immer auf eine ganze Zeile aus, sodass sie sich nicht auf den Index auswirken. Aktualisierungen wirken jedoch etwas eindeutiger, da sie nur bestimmte Spalten betreffen können.
Wenn ich Spalten habe, die in keinem Index enthalten sind, und diese aktualisiere, werden sie verlangsamt, nur weil ich einen Index für andere Spalten in dieser Tabelle habe?
Nehmen wir zum Beispiel an, ich habe in meiner User
Tabelle einen oder zwei Indizes, den Primärschlüssel, der eine Identity / Auto Increment-Spalte ist, und möglicherweise einen anderen in einer Fremdschlüsselspalte.
Wenn ich eine Spalte aktualisiere, auf der sich der Index nicht befindet, z. B. Telefonnummer oder Adresse, wird diese Aktualisierung verlangsamt, weil ich in beiden Situationen Indizes für diese Tabelle in anderen Spalten habe? Die Spalten, die ich aktualisiere, befinden sich nicht in Indizes. Daher sollten die Indizes logischerweise nicht aktualisiert werden, oder? Wenn überhaupt, würde ich denken, dass sie beschleunigt werden, wenn ich die Indizes in der WHERE-Klausel verwende.
so there is no way they will not affect the index
außer für gefilterte Indizes ...