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

¿Qué consulta SQL es mejor, COINCIDIR CONTRA o ME GUSTA?

Actualizar

A partir de MySQL 5.6 y más tarde, InnoDB las tablas admiten Match... Against .

El primero es mucho mejor. En MiISAM tablas utilizará un índice de texto completo contra esas columnas. El otro hará un escaneo completo de la tabla haciendo una concatenación en cada fila y luego una comparación.

LIKE solo es eficiente si lo haces contra:

  • una columna (no es el resultado de una función, a menos que su proveedor de base de datos particular admita índices funcionales (Oracle, por ejemplo) y usted los esté utilizando);
  • el comienzo de la columna (es decir, LIKE 'blah%' a diferencia de LIKE '%blah%' ); y
  • una columna indexada.

Si alguna de esas condiciones no es verdadera, la única forma en que el motor SQL puede ejecutar la consulta es mediante un escaneo completo de la tabla. Esto se puede utilizar en aproximadamente 10-20 mil filas. Sin embargo, más allá de eso, rápidamente se vuelve inutilizable.

Nota: Un problema con MATCH en MySQL es que parece coincidir solo con palabras completas, por lo que una búsqueda de 'bla' no coincidirá con una columna con un valor de 'blah', pero una búsqueda de 'bla*' sí lo hará.