2010-04-08 25 views
7

Estoy empezando a investigar la optimización para mi base de datos MySQL. Según lo que estoy leyendo, la indexación parece ser una buena idea, así que quiero crear un índice en una de mis columnas VARCHAR, en una tabla que utiliza el motor MyISAM.Tamaños de índice en MySQL

Por lo que estoy leyendo, entiendo que un índice está limitado a un tamaño de 1,000 bytes. Sin embargo, un carácter VARCHAR tiene 3 bytes de tamaño. ¿Eso significa que si quiero indexar una columna VARCHAR con 50 filas, necesito un prefijo de índice de 6 caracteres? (1,000 bytes/50 filas/3 bytes por carácter = 6.66)

Si es así, parece un poco complicado, y es por eso que estoy cuestionando mi comprensión. Parece bastante extraño que solo pueda indexar 333 filas en una columna VARCHAR, usando un prefijo de 1 carácter.

¿Echo de menos algo?

Respuesta

4

Por lo que he leído, entiendo que un índice está limitado a un tamaño de 1000 bytes.

Índice clave longitud se limita a 1000 bytes en MyISAM, 767 bytes en InnoDB (por columna).

Esto significa que no se puede indexar una sola UTF8 columna de más de 333 caracteres en una tabla MyISAM (cuando se calcula el tamaño del índice máximo, MySQL asume 3 bytes por carácter, aunque la longitud real puede ser mucho más pequeño)

Puede crear tantos registros indexados como necesite.

+0

Ah, ¿entonces la restricción de 1000 bytes solo se aplica al nombre de la columna? – Tommy

+2

@Tommy: se aplica a la cantidad máxima de caracteres que puede almacenar en una columna indexada de un solo registro. – Quassnoi

+0

Gracias, eso lo aclara un poco. Entonces, cada registro en la columna que quiero indexar puede tener 333 caracteres. ¿Cuál es la razón de usar prefijo de índice con menos de 333 caracteres? El ejemplo en la referencia de MySQL usa un prefijo de 10 caracteres. – Tommy

0

Creo que se refiere al ancho varchar. Si el tamaño máximo del índice es 1000 bytes y un varchar tiene una longitud de 3 bytes, entonces el tamaño máximo indexable sería 1000/3.

Cuestiones relacionadas