Eu tenho um índice de texto completo em uma tabela para as articles
colunas content
etitle
keywords
Ao fazer a busca em cada uma das colunas, assim select count(1) from articles where match(content,title,keywords) against ('cats' in boolean mode)
, os resultados demoram entre 12 e 15 segundos.
Mas fazer as colunas individualmente ( select count(1) from articles where match(content) against ('cats' in boolean mode)
) normalmente leva menos de 50 ms.
Por que pesquisar as 3 colunas leva mais de 100 vezes mais do que todas elas separadamente?
Esta não é uma questão de como torná-lo mais rápido, mas sim de perguntar "por que é tão lento?"
Tabela/Índices
id int(30) PK auto_increment
url varchar(1024)
title varchar(255) FULLTEXT
content text FULLTEXT
keywords varchar(1024) FULLTEXT
comments text
created_date int(11)
posted_date int(11)
explica
Este primeiro é a consulta de várias colunas:
Esta segunda é a nova consulta muito mais rápida que executa as 3 colunas separadamente e depois as une (o cache da consulta foi limpo).
Ordem das Colunas de Texto Completo
Usar/Forçar Índice com Explicar
PROBLEMA
Nas postagens da sua pergunta, vejo 3 índices FULLTEXT. Há um para cada coluna.
Por que a consulta funcionou? O MySQL funcionava com o que tinha. No seu caso, ele pesquisou por uma varredura completa da tabela. Isso é o que o otimizador MySQL Query decidiu.
SOLUÇÃO
O que você realmente precisa é de um único índice FULLTEXT com todas as 3 colunas
Só então você pode dizer
Eu sugeri fazer índices FULLTEXT compostos antes
Mar 16, 2012
: acelere a pesquisa em várias colunasOct 13, 2012
: O sublinhado pode ser forçado como um divisor de palavras sem um plug-in de analisador de texto completo?DE UMA CHANCE !!!