Tengo un mapa de cadenas a enteros. Para almacenar este mapa en una base de datos MySQL creé la siguiente tabla:¿Es una forma correcta de indexar la columna TEXT de la base de datos MySQL?
CREATE TABLE map(
Argument TEXT NOT NULL,
Image INTEGER NOT NULL
)
he elegido el tipo de texto para la discusión porque su longitud es impredecible, actualmente el registro más largo tiene 2290 caracteres y la longitud media es de 88 caracteres.
Después de conocer los problemas de rendimiento intenté agregar el índice en la columna Argument
, pero encontré que debo especificar la longitud, así que para evitar esta limitación agregué una nueva columna entera que contenía valores hash (md5 o más) de Valores de columna de argumento.
ALTER TABLE map ADD COLUMN ArgumentHash INTEGER;
y el índice combinado
CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80));
Desde ese momento los problemas con el rendimiento ha desaparecido. Me gustaría preguntar si es una forma correcta de resolver este problema.
Encontré que VARCHAR puede ser un mejor tipo de columna para usar con los índices, porque VARCHAR, a diferencia de TEXT, se almacena en línea y ofrece un mejor rendimiento para los datos de acceso frecuente. http://stackoverflow.com/users/144287/brenton-alker –