Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como procurar linhas contendo uma substring?


Bem, você sempre pode tentar WHERE textcolumn LIKE "%SUBSTRING%" - mas isso certamente será bastante lento, pois sua consulta não pode fazer uma correspondência de índice porque você está procurando por caracteres no lado esquerdo.

Depende do tipo de campo - uma área de texto geralmente não será salva como VARCHAR, mas sim como (uma espécie de) campo TEXT, então você pode usar o COMBINAR CONTRA operador.

Para obter as colunas que não correspondem, basta colocar um NOT na frente de:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Se a pesquisa diferencia maiúsculas de minúsculas ou não, depende de como você armazena os dados, especialmente qual COLLATION você usa. Por padrão, a pesquisa não diferencia maiúsculas de minúsculas.

Resposta atualizada para refletir a atualização da pergunta:


Eu digo que fazer um campo WHERE field LIKE "%value%" é mais lento que WHERE field LIKE "value%" se o campo da coluna tiver um índice, mas isso ainda é consideravelmente mais rápido do que obter todos os valores e ter o filtro do aplicativo. Ambos os cenários:

1/ Se você fizer SELECT field FROM table WHERE field LIKE "%value%" , o MySQL varrerá toda a tabela e enviará apenas os campos contendo "valor".

2/ Se você fizer SELECT field FROM table e, em seguida, faça com que seu aplicativo (no seu caso PHP) filtre apenas as linhas com "valor" nele, o MySQL também verificará a tabela inteira, mas enviará todos os campos para o PHP, que terá que fazer um trabalho adicional. Isso é muito mais lento do que o caso #1.

Solução:Por favor, use o WHERE cláusula e use EXPLAIN para ver o desempenho.