sql >> Base de Datos >  >> RDS >> Mysql

¿Es la búsqueda de texto completo la respuesta?

El problema con la búsqueda de tipo '%palabra clave%' es que no hay forma de buscarla de manera eficiente en una tabla normal, incluso si crea un índice en esa columna. Piense en cómo se vería esa cadena en la guía telefónica. En realidad, no hay forma de optimizarlo, tiene que escanear toda la guía telefónica, y eso es lo que hace MySQL, un escaneo completo de la tabla.

Si cambia esa búsqueda a 'palabra clave%' y usa un índice, puede obtener una búsqueda muy rápida. Sin embargo, parece que esto no es lo que quieres.

Entonces, con eso en mente, he usado bastante la indexación/búsqueda de texto completo, y aquí hay algunos pros y contras:

Ventajas

  • Muy rápido
  • Devuelve los resultados ordenados por relevancia (de forma predeterminada, aunque puede utilizar cualquier clasificación)
  • Se pueden usar palabras vacías.

Contras

  • Solo funciona con tablas MyISAM
  • Las palabras que son demasiado cortas se ignoran (el mínimo predeterminado es 4 letras)
  • Requiere un SQL diferente en la cláusula where, por lo que deberá modificar las consultas existentes.
  • No coincide con cadenas parciales (por ejemplo, 'palabra' no coincide con 'palabra clave', solo con 'palabra')

Aquí hay una buena documentación sobre la búsqueda de texto completo .

Otra opción es usar un sistema de búsqueda como Sphinx . Puede ser extremadamente rápido y flexible. Está optimizado para realizar búsquedas y se integra bien con MySQL.