"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 > ## Como posso otimizar consultas LIKE \'%string%\' do MySQL com InnoDB?

## Como posso otimizar consultas LIKE \'%string%\' do MySQL com InnoDB?

Publicado em 01/11/2024
Navegar:829

## How Can I Optimize MySQL LIKE \'%string%\' Queries with InnoDB?

Otimizando consultas LIKE '%string%' do MySQL no InnoDB

Muitos aplicativos exigem a pesquisa de uma string dentro de um corpo de texto. O MySQL oferece um operador LIKE para realizar essas pesquisas, mas como podemos otimizar essas consultas para um desempenho ideal?

Problema

Considere a seguinte tabela:

CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL auto_increment,
`keywords` varchar(200) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

Ao executar uma consulta como:

SELECT id FROM example WHERE keywords LIKE '%whatever%'

podemos esperar que o banco de dados use um índice para acelerar a pesquisa. No entanto, se adicionarmos um índice simples na coluna de palavras-chave usando:

ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);

uma consulta EXPLAIN revela que O MySQL ainda precisa verificar a tabela inteira.

Solução

O MySQL usa índices combinando o início da string de pesquisa. Para consultas como LIKE 'whatever%', o índice pode ser usado porque 'whatever' está ancorado no início da string.

No entanto, consultas como LIKE '%whatever%' não possuem tal âncora. O termo de pesquisa aparece "flutuando" dentro da string, forçando o MySQL a varrer todo o campo.

Para otimizar tais consultas, podemos usar índices de texto completo. Esses índices são projetados especificamente para pesquisas “flutuantes”. InnoDB suporta índices de texto completo desde a versão 5.6.4, tornando-o uma opção viável para otimizar consultas LIKE '%string%'.

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