BRG 2 Denunciar post Postado Dezembro 12, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
marcelo.lipienski 1 Denunciar post Postado Dezembro 12, 2011 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 Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Dezembro 12, 2011 http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 12, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites