2010-04-08 22 views
7

Sto appena iniziando a studiare l'ottimizzazione per il mio database MySQL. Da quello che sto leggendo, l'indicizzazione sembra una buona idea, quindi sto cercando di creare un indice su una delle mie colonne VARCHAR, su un tavolo usando il motore MyISAM.Dimensioni indice in MySQL

Da quello che sto leggendo, capisco che un indice è limitato a una dimensione di 1.000 byte. Tuttavia, un carattere VARCHAR ha una dimensione di 3 byte. Significa che se voglio indicizzare una colonna VARCHAR con 50 righe, ho bisogno di un prefisso indice di 6 caratteri? (1.000 byte/50 righe/3 byte per carattere = 6,66)

Se è così, questo sembra un po 'complicato - motivo per cui sto mettendo in discussione la mia comprensione. Sembra piuttosto strano che tu possa solo indicizzare 333 righe in una colonna VARCHAR, usando un prefisso di 1 carattere.

Mi manca qualcosa?

risposta

4

Da quello che ho letto, ho capito che un indice è limitato a una dimensione di 1000 byte.

Indice chiave lunghezza è limitata a 1000 byte MyISAM, 767 byte InnoDB (per colonna).

Questo significa che non è possibile indicizzare un singolo UTF8 colonna lunghi oltre 333 caratteri in una tabella MyISAM (quando si calcola la dimensione massima di indice, MySQL assume 3 byte per carattere, sebbene la lunghezza effettiva può essere molto più piccolo)

Puoi creare tutti i record indicizzati di cui hai bisogno.

+0

Oh, quindi la limitazione di 1000 byte si applica solo al nome della colonna? – Tommy

+2

@Tommy: si applica alla quantità massima di caratteri che è possibile memorizzare in una colonna indicizzata di un singolo record. – Quassnoi

+0

Grazie, questo lo chiarisce un po '. Quindi ogni record nella colonna che voglio indicizzare può avere 333 caratteri. Qual è il motivo dell'utilizzo del prefisso indice con meno di 333 caratteri? L'esempio nel riferimento mysql utilizza un prefisso di 10 caratteri. – Tommy

0

Penso che significasse la larghezza varchar. Se la dimensione massima dell'indice è 1000 byte e un varchar è lungo 3 byte, la dimensione massima indicizzabile sarà 1000/3.