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

¿Cómo buscar filas que contengan una subcadena?

Bueno, siempre puedes probar WHERE textcolumn LIKE "%SUBSTRING%" - pero se garantiza que esto será bastante lento, ya que su consulta no puede hacer una coincidencia de índice porque está buscando caracteres en el lado izquierdo.

Depende del tipo de campo:un área de texto generalmente no se guardará como VARCHAR, sino como (una especie de) campo de TEXTO, por lo que puede usar COINCIDIR CONTRA operador.

Para obtener las columnas que no coinciden, simplemente coloque un NO delante de me gusta:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Si la búsqueda distingue entre mayúsculas y minúsculas o no, depende de cómo almacena los datos, especialmente qué COLLATION usa. De forma predeterminada, la búsqueda no distinguirá entre mayúsculas y minúsculas.

Respuesta actualizada para reflejar la actualización de la pregunta:

Digo eso haciendo un WHERE field LIKE "%value%" es más lento que WHERE field LIKE "value%" si el campo de la columna tiene un índice, pero aún así es considerablemente más rápido que obtener todos los valores y tener el filtro de la aplicación. Ambos escenarios:

1/ Si lo hace SELECT field FROM table WHERE field LIKE "%value%" , MySQL escaneará toda la tabla y solo enviará los campos que contengan "valor".

2/ Si lo haces SELECT field FROM table y luego haga que su aplicación (en su caso PHP) filtre solo las filas con "valor", MySQL también escaneará toda la tabla, pero enviará todos los campos a PHP, que luego tiene que hacer un trabajo adicional. Esto es mucho más lento que el caso #1.

Solución:utilice WHERE y use EXPLAIN para ver el rendimiento.