Задать вопрос
vanyahuk
@vanyahuk

Как ускорить работу LIKE в mysql?

Как ускорить работу LIKE в mysql по текстовому полю? в таблице 100к записей?
  • Вопрос задан
  • 2842 просмотра
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 6
@Fortop
Tech/Team lead
Ответ самый правильный - не использовать like вовсе.
А работать с fulltext и лучше вне mysql

Ответ для бедных - использовать только like с префиксом т.е. вида somestring%
Никаких %somestring%
Ответ написан
Комментировать
fornit1917
@fornit1917
если запрос на строгое совпадение или типа "query%", то обычный b-tree индекс поможет (если у вас varchar и длина поля позволяет, конечно). Если "%query%" или "%query" то особо никак не ускорить. Можно тогда настроить полнотекстовый индекс и использовать полнотекстовый поиск вместо LIKE.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для начала попробуйте отказаться от вложенного запроса.
SELECT `p`.`id`, `p`.`title`, `p`.`slug`, `p`.`label`, `p`.`price`, `p`.`old_price`, `p`.`category_id`, `p`.`picture_id`, `p`.`brand_id` 
  FROM `products` AS `p`
  LEFT JOIN `brands` AS `b` ON `b`.`id` = `p`.`brand_id`
  WHERE `p`.`title` LIKE '%лампа%' OR `b`.`title` LIKE '%лампа%' OR `b`.`tags` like '%лампа%'
  GROUP BY `products`.`id` order by `products`.`sales` desc, `products`.`views` desc 
  LIMIT 18
Ответ написан
Adamos
@Adamos
select `id`, `title`, `slug`, `label`, `price`, `old_price`, `category_id`, `picture_id`, `brand_id` 
from `products` where 
`brand_id` IN (select id from `brands` where `title` like '%лампа%' or `tags` like '%лампа%') 
OR `title` like '%лампа%'
group by `products`.`id`
order by `products`.`sales` desc, `products`.`views` desc 
limit 18
Ответ написан
Комментировать
@redya69
Попробуйте sphinx - он простой и удобный)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы