Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal!
Estou com um problema ao realizar selects no MySql.
Imaginem a seguinte situação:
Tenho uma tabela onde contém nomes de produtos e um sistema de busca em php.
Na base um dos produtos chama-se "Carrinho de brinquedo estilo Ferrari".
Digamos que faço uma busca pelos termos "Carrinho Ferrari".
Fiz o SQL desta maneira:
SELECT * FROM produtos WHERE nome LIKE '%Carrinho Ferrari%' LIMIT 20
Este select não retornou nenhum registro.
Então fiz outro SQL desta maneira:
SELECT * FROM produtos WHERE nome LIKE '%Carrinho%Ferrari%' LIMIT 20
Este select me retornou o produto que eu queria, porém, o tempo de consulta aumentou muito.
Tenho na base mais de 2000 registros de produtos, separados por categoria. Quando o usuário busca em TODAS AS CATEGORIAS, utilizando o segundo exemplo acima, o tempo é muito grande.
Alguém teria alguma sugestão de como eu posso otimizar essa busca, ou seja, que ela funcione, porém de uma maneira rápida??
Se puderem me ajudar, ficarei imensamente agradecido!
Abs.
uma das palavras
(campo like '%carrinho%'
or
campo like '%ferrari%')
ambas
(campo like '%carrinho%'
and
campo like '%ferrari%')
Isto usando o like, mas o Mysql tem o Match que talvez seja melhor neste caso.
A forma correta e performática de se fazer buscas textuais em SQL é utilizando um índice FULLTEXT.
Lembrando que só funciona em tabelas MyISAM
CREATE FULLTEXT INDEX nome_do_indice ON nome_da_tabela (nome_da_coluna)
e finalmente seu SQL deve ser alterado para utilizar o índice
SELECT coluna1, coluna2, colunaN FROM tabela1, tabelaN WHERE MATCH (coluna_com_indice) AGAINST ('texto a ser pesquisado')
Este link contém algumas informações úteis para seu problema
http://www.petefreitag.com/item/477.cfm