Tengo una tabla MySQL para la cual hago frecuentes consultas SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%'
. ¿Algún tipo de índice ayudaría a acelerar las cosas?Cómo acelerar SELECT .. LIKE consultas en MySQL en varias columnas?
Hay unos pocos millones de registros en la tabla. Si hay algo que acelere la búsqueda, ¿afectaría seriamente el uso del disco por los archivos de la base de datos y la velocidad de las declaraciones INSERT
y DELETE
? (Sin UPDATE
se realiza cada vez)
actualización: Rápidamente después de publicar, he visto una gran cantidad de información y discusión acerca de la forma en LIKE
se utiliza en la consulta; Me gustaría señalar que la solución debe usar LIKE '%text%'
(es decir, el texto que estoy buscando se antepone y se agrega con un% comodín). La base de datos también tiene que ser local, por muchas razones, incluida la seguridad.
Piénselo de esta manera, no es una analogía perfecta, pero demuestra el punto. Considere un libro con un índice de palabras en la parte posterior. Si desea buscar una palabra simple o incluso palabras que comiencen con las mismas primeras letras, no hay problema. Considere lo que sucede cuando quiere usar ese índice de libros para buscar todas las palabras que contienen las letras "exe" en cualquier parte de la palabra. El índice es bastante inútil y también podría leer el libro real buscando esas palabras. Ese es aproximadamente el problema que está imponiendo en mySQL. – JohnFx