"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > ## MySQL LIKE vs LOCATE: Qual é mais rápido para correspondência de padrões?

## MySQL LIKE vs LOCATE: Qual é mais rápido para correspondência de padrões?

Publicado em 2024-11-09
Navegar:849

##  MySQL LIKE vs LOCATE: Which is Faster for Pattern Matching?

MySQL LIKE vs LOCATE: Qual é mais eficiente?

Ao realizar consultas de correspondência de padrões no MySQL, você tem duas opções principais: o LIKE operador e a função LOCATE. Qual delas tem desempenho mais rápido?

Para responder a essa pergunta, vamos comparar o desempenho dessas duas abordagens usando um benchmark simples. A consulta a seguir usa o operador LIKE para localizar linhas onde uma coluna contém um texto específico:

SELECT * FROM table WHERE column LIKE '%text%';

A consulta a seguir usa a função LOCATE para realizar a mesma operação:

SELECT * FROM table WHERE LOCATE('text',column)>0;

Executando essas consultas em um grande conjunto de dados mostra que o operador LIKE é marginalmente mais rápido, principalmente porque evita a comparação adicional (> 0) exigida por LOCATE. Aqui estão os resultados de um benchmark:

mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar'));
 --------------------------------------------- 
| BENCHMARK(100000000,LOCATE('foo','foobar')) |
 --------------------------------------------- 
|                                           0 |
 --------------------------------------------- 
1 row in set (3.24 sec)

mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar') > 0);
 ------------------------------------------------- 
| BENCHMARK(100000000,LOCATE('foo','foobar') > 0) |
 ------------------------------------------------- 
|                                               0 |
 ------------------------------------------------- 
1 row in set (4.63 sec)


mysql> SELECT BENCHMARK(100000000,'foobar' LIKE '%foo%');
 -------------------------------------------- 
| BENCHMARK(100000000,'foobar' LIKE '%foo%') |
 -------------------------------------------- 
|                                          0 |
 -------------------------------------------- 
1 row in set (4.28 sec)

mysql> SELECT @@version;
 ---------------------- 
| @@version            |
 ---------------------- 
| 5.1.36-community-log |
 ---------------------- 
1 row in set (0.01 sec)
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3