En mi post aquí describo, en detalle, una técnica que permite a utilizar el índice con LIKE
para una rápida %infix%
búsqueda, a costa de algunos de almacenamiento extra:
https://stackoverflow.com/a/22531268/543814
Siempre que las cadenas sean relativamente pequeñas, el requisito de almacenamiento es generalmente aceptable.
Según Google, la dirección de correo electrónico promedio es 25
caracteres de longitud. Esto aumenta su almacenamiento requerido por un factor de 12.5
en promedio, y le da una búsqueda indexada rápida a cambio. (Ver mi publicación para los cálculos.)
Desde mi punto de vista, si está almacenando 10'000 direcciones de correo electrónico, también debería almacenar (el equivalente de) alrededor de 100'000 direcciones de correo electrónico. Si esto es lo que se necesita para permitirle usar un índice, eso parece una compensación aceptable. A menudo, el espacio en disco es barato, mientras que las búsquedas no indexadas no son asequibles.
Si usted decide tomar este enfoque, sugiero que se limite la longitud de entrada de direcciones de correo electrónico a 64
caracteres. Esas direcciones de correo electrónico raras (o atacantes) de tal longitud requerirán hasta 32
veces el almacenamiento habitual. Esto le da:
- protección contra un atacante tratando de inundar su base de datos, ya que estos aún no son muy impresionantes cantidades de datos.
- La expectativa de que la mayoría de las direcciones de correo electrónico no sean de esta longitud de todos modos.
Si se tiene en cuenta 64
caracteres demasiado dura un requisito, utilice 255
lugar, para un aumento del peor caso de almacenamiento del factor de 127.5
. ¿Ridículo? Posiblemente. ¿Probable? ¿No rápido? Muy.
[Esa explicación] (http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning) podría ayudar a entender por qué no está funcionando. –
[** Esta respuesta **] (http://stackoverflow.com/a/22531268/793309) muestra una buena técnica, indización de todos los sufijos, que puede hacer que este tipo de consulta funcione muy bien, pero a costa de algunos codificación adicional y mayores requisitos de almacenamiento. – antinome