Mysql
 sql >> Database >  >> RDS >> Mysql

Ordine di indicizzazione composito InnoDB e prestazioni INSERT

(Nota:questa risposta chiarisce o non è d'accordo con alcuni dei commenti già scritti.)

DELETEs sono rallentati a causa dell'eliminazione delle voci dell'indice. UPDATEs può essere rallentato:dipende dal fatto che una colonna indicizzata sia stata modificata.

SELECTs , UPDATEs e DELETEs , ma non INSERTs , è necessario trovare le righe; per questo, un indice può aiutare molto.

Un INSERT è danneggiato un importo extra se c'è un UNIQUE indice da controllare.

Chiavi secondarie (in InnoDB), tranne per UNIQUE chiavi, vengono aggiornati (solitamente a causa di INSERTs e DELETEs , ma probabilmente a causa di UPDATE ) in modo "ritardato" tramite il cosiddetto "Change Buffer". In questo modo viene effettivamente rimandato l'aggiornamento dell'indice, ma mantiene l'indice completamente utilizzabile.

Niente di tutto ciò è influenzato dall'ordine delle colonne in un indice. Tuttavia, se un indice è più grande di quello che può essere memorizzato nella cache nella RAM, entra in gioco il "caching" e l'I/O può essere coinvolto o meno. Ma questo è un altro argomento.

In generale il vantaggio da un indice per la lettura supera di gran lunga il rallentamento delle operazioni di scrittura.