Estoy recopilando algunos millones de filas de datos que contienen URL. Para deduplicarlos, necesito buscar una URL existente antes de insertar una nueva fila. Por lo tanto, me gustaría crear un índice en esa columna.
¿Cuál es el mejor tamaño de prefijo, sabiendo que la mayoría de las URL comienzan con http:// o https:// ?
Para unos pocos millones de filas, esencialmente no hay posibilidad de que MD5(URL) tenga una colisión accidental. Son 32 dígitos hexadecimales ( CHAR(32) CHARACTER SET ascii ). O mejor sería UNHEX(...) y ponerlo en BINARY(16) .
Luego agregue un índice UNIQUE en esa columna.
Qué versión estás usando? Algunas versiones más nuevas de MariaDB tienen algo así incorporado.
Hay dos formas de agregar índice en una cadena larga:
crc32_urls y cree un índice en esto. Es posible que algunas URL tengan el mismo resultado por crc32 (urls), por lo que cada vez que busque debe ejecutarse así: SELECT * FROM table WHERE crc32_urls = xxx AND urls = xxx SELECT COUNT(DISTINCT urls)/COUNT(*) FROM tablecomparado con
SELECT COUNT(DISTINCT left(urls, x))/COUNT(*) FROM table la x es la longitud que especificó. Cuando dos números estén cerca, elija la longitud mínima.