MySQL - оптимизация запроса LIKE

программирование php MySQL базы данных sql

Добрый день.
Нужно добавить на сайт функцию поиска товара по его коду.
Думаю производить поиск по таблице используя LIKE, запрос должен быть следующего вида:

SELECT `field1`, `field2`
FROM `goods`
WHERE `code` LIKE '%код товара%'.

Погуглив прочитал несколько статей и обсуждений на форумах, где-то предлагают использовать обычный индекс, где то предлагают изменить тип поля на бинарный, чтобы поиск проходил путем сравнения байтов.

Кажется при использовании LIKE оптимизируются только запросы типа LIKE 'код товара%', но точно в этом не уверен.

Также склоняюсь к применению полнотекстового индекса, в таком случае нужно будет переносить коды товаров в отдельную таблицу, так как основная таблица использует движок InnoDB.

Сейчас поле код товара имеет тип varchar 25, в базе имеется около 1 млн кодов товаров.

Хотел узнать Ваше мнение, как лучше оптимизировать запросы такого вида?

Примечание:
Неужели администраторы БД не посещают ВИО? ))
Ответы:
Возник тот же вопрос, пока выяснил что LIKE '%целое_слово_без_пробелов%' на 5ти млн выполняется достаточно быстро, (у меня показывало 0.09 сек в худшем случае), а при поиске фразы с пробелом время запроса увеличивается сразу до 48!!! секунд.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.