Tengo una gran mesa con algo así como 8 300 000 filas (no se editará ni eliminará nunca).¿Acelerar mis índices en MySQL - CRC o MD5?
Mi primera columna tiene un aspecto similar P300-4312B_X16_S
y la entrada no es única, así que utilizo un ÍNDICE regular en este campo.
Sin embargo, MySQL es MUCHO más rápido usando un campo binario en lugar de un varchar, así que codifico mi ÍNDICE en MD5 usando BINARY(16)
para almacenar los datos.
Esta mañana, he comenzado a utilizar CRC32 por primera vez y he visto que CRC32 se puede generar como una cadena hexadecimal con 8 caracteres.
Mi pregunta: Si utilizo un CRC32 en lugar de un MD5, será más rápido. Sin embargo, cuando se ejecuta CRC32 digamos 2 000 000 de valor único, el resultado será único o tal vez en algún momento tendré el doble de la misma cadena para dos cadenas diferentes. Lo pregunto porque el resultado es de solo 8 caracteres (32b) de largo en lugar de 32 (128b) como el MD5.
Gracias.
eche un vistazo a esta página: http://www.dslreports.com/forum/remark,13525942 – jcho360
Por supuesto, obtendrá más colisiones con CRC32. Es una herramienta para verificar la integridad de los datos, no una función hash como md5. Las funciones hash están diseñadas para producir pequeñas colisiones (los mismos resultados para diferentes entradas) como sea posible. CRC no es. – dmitry
'Sin embargo, MySQL es MUCHO más rápido usando un campo binario en lugar de varchar, así que codifico mi ÍNDICE en MD5 usando BINARY (16) para almacenar los datos. Parece que sus índices están rotos. La indexación sobre un 'VARCHAR' debería funcionar bien. –