Atualizar
A partir de
MySQL 5.6
e mais tarde, InnoDB
tabelas suporta Match... Against
. A primeira é muito melhorar. Em MyISAM tabelas, ele usará um índice de texto completo nessas colunas. O outro fará uma varredura completa da tabela fazendo uma concatenação em cada linha e depois uma comparação.
LIKE
só é eficiente se você estiver fazendo isso contra:- uma coluna (não é resultado de uma função, a menos que seu fornecedor de banco de dados específico suporte índices funcionais - Oracle, por exemplo - e você os esteja usando);
- o início da coluna (ou seja,
LIKE 'blah%'
ao contrário deLIKE '%blah%'
); e - uma coluna indexada.
Se qualquer uma dessas condições não for verdadeira, a única maneira de o mecanismo SQL executar a consulta é fazendo uma varredura completa da tabela. Isso pode ser usado em cerca de 10 a 20 mil linhas. Além disso, rapidamente se torna inutilizável.
Observação: Um problema com MATCH no MySQL é que ele parece corresponder apenas a palavras inteiras, então uma pesquisa por 'bla' não corresponderá a uma coluna com um valor de 'blah', mas uma pesquisa por 'bla*' sim.