Ho sempre visto la gente dice che gli indici rallentano update
, delete
e insert
. Questo è usato come un'istruzione coperta, come se fosse un assoluto.
Mentre ottimizzo il mio database per migliorare le prestazioni, continuo a imbattermi in questa situazione che sembra contraddire logicamente quella regola per me, e da nessuna parte posso trovare qualcuno che dica o spieghi in altro modo.
In SQL Server, e credo / presumo che la maggior parte degli altri DBMS, gli indici vengano creati in base a colonne specifiche specificate. Inserimenti ed eliminazioni influenzeranno sempre un'intera riga, quindi non è possibile che non influenzino l'indice, ma gli aggiornamenti sembrano un po 'più unici, possono influenzare in modo specifico solo determinate colonne.
Se ho colonne che non sono incluse in nessun indice e le aggiorno, sono rallentate solo perché ho un indice su altre colonne in quella tabella?
Ad esempio, supponiamo che nella mia User
tabella ci siano uno o due indici, la chiave primaria che è una colonna Identità / Incremento automatico e possibilmente un'altra su una colonna di chiave esterna.
Se aggiorno una colonna senza l'indice direttamente su di essa, come ad esempio il loro numero di telefono o indirizzo, questo aggiornamento viene rallentato perché ho indici su questa tabella su altre colonne in entrambe le situazioni? Le colonne che sto aggiornando non sono negli indici, quindi logicamente, gli indici non dovrebbero essere aggiornati, no? Semmai, penso che siano accelerati se uso gli indici nella clausola WHERE.
so there is no way they will not affect the index
fatta eccezione per gli indici filtrati ...