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

CHIAVE PRIMARIA casuale per Innodb

MySQL non "ricostruisce" l'indice su ogni inserto.

La dimensione della pagina predefinita di MySQL è 16K. Alloca queste pagine con incrementi di 1 MB (chiamati estensioni).

Quando una tabella viene creata per la prima volta (gli indici vengono ricostruiti), le pagine vengono riempite per 15/16, lasciando spazio per alcuni inserti casuali (1k di spazio). Se le voci dell'indice sono di 500 byte ciascuna (dimensione chiave primaria + dati riga per un indice cluster), ciò lascia spazio per l'inserimento di 2 nuove righe prima di dover dividere la pagina.

MySQL mantiene il valore del record più alto e più basso nell'intestazione della pagina, quindi i record all'interno di un determinato intervallo vanno sulla stessa pagina.

Quando MySQL deve inserire una riga in una pagina intera, la pagina deve essere divisa. MySQL aggiungerà una nuova pagina e sposterà metà dei dati della pagina nella nuova pagina.

All'interno di una pagina, i record potrebbero non essere effettivamente in ordine fisico. Saranno nell'ordine in cui sono stati inseriti. Sono collegati in ordine tramite una forma di elenco collegato. Quindi, anche un inserimento casuale, al di fuori della necessità di dividere la pagina, non provoca lo spostamento fisico dei dati.

Dopo molti inserti casuali, le tue pagine saranno da 1/2 piene a piene. Un indice con molte pagine intere a metà influirà negativamente sulle prestazioni di lettura (devi leggere due pagine intere a metà per leggere lo stesso numero di record di una pagina intera 15/16).

Ora, se stai inserendo le righe nell'ordine dell'indice, MySQL continua semplicemente ad aggiungere alla fine delle pagine, riempiendole 15/16 per intero e aggiungendo un'estensione alla volta delle pagine. Molto meno penalizzazione delle prestazioni poiché non vi è alcuna divisione delle pagine, quindi non è coinvolto lo spostamento dei dati, per non parlare del vantaggio in termini di prestazioni di lettura di pagine quasi intere.

Gli inserimenti casuali aumentano anche la frammentazione delle pagine, che può influire sulle prestazioni di lettura se leggi spesso un numero elevato di record sequenziali (raro).

Inoltre, cambia il buffering potrebbe interessarti.