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

Qual consulta SQL é melhor, MATCH AGAINST ou LIKE?

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 de LIKE '%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.