I ciągle widzę ludzi powiedzieć, że indeksy spowolnić update
, delete
a insert
. Jest to używane jako instrukcja zbiorcza, tak jakby była absolutem.
Podczas dostrajania mojej bazy danych w celu poprawy wydajności ciągle napotykam na tę sytuację, która wydaje mi się logicznie sprzeczna z tą regułą i nigdzie nie mogę znaleźć nikogo, kto by powiedział lub wyjaśnił w jakikolwiek inny sposób.
W SQL Server i uważam / zakładam, że większość innych DBMS, twoje indeksy są tworzone na podstawie określonych kolumn, które określisz. Wstawianie i usuwanie zawsze wpływa na cały wiersz, więc nie ma mowy, aby nie wpływały na indeks, ale aktualizacje wydają się nieco bardziej unikalne, mogą w szczególności wpływać tylko na niektóre kolumny.
Jeśli mam kolumny, które nie są uwzględnione w żadnym indeksie i aktualizuję je, czy są one spowolnione tylko dlatego, że mam indeks w innych kolumnach w tej tabeli?
Na przykład powiedzmy w mojej User
tabeli, że mam jeden lub dwa indeksy, klucz podstawowy, który jest kolumną Identity / Auto Increment, i ewentualnie inny w kolumnie z kluczem obcym.
Jeśli zaktualizuję kolumnę bez indeksu bezpośrednio na niej, na przykład podając numer telefonu lub adres, czy ta aktualizacja zostanie spowolniona, ponieważ mam indeksy w tej tabeli w innych kolumnach w obu sytuacjach? Aktualizowane przeze mnie kolumny nie znajdują się w indeksach, więc logicznie indeksy nie powinny być aktualizowane, prawda? Jeśli cokolwiek, sądzę, że zostaną przyspieszone, jeśli użyję indeksów w klauzuli WHERE.
so there is no way they will not affect the index
z wyjątkiem przefiltrowanych indeksów ...