Из вашего вопроса не ясно, можете ли вы использовать =
вместо LIKE
. От пользователей не требуется вводить весь номер SKU?
Невозможно улучшить производительность LIKE
, когда в начале вашего шаблона есть подстановочный знак.
Например, если я попрошу вас прочитать телефонную книгу и найти всех людей, чье имя содержит символы «земля» в любом месте их имени - начало, середина или конец - вы не сможете воспользоваться тем, что Телефонная книга отсортирована по имени. Вам нужно будет внимательно прочитать всю книгу, чтобы найти имена, соответствующие шаблону.
Вот так подстановочные знаки работают в LIKE
условиях. Если ваш шаблон не имеет подстановочного знака в начале, он вынужден выполнять сканирование таблицы. Он не может использовать индекс.
В MySQL есть индексы FULLTEXT, позволяющие сопоставлять слова в одном или нескольких строковых столбцах. Но он соответствует только целым словам, он не может соответствовать шаблонам, которые являются частями слов.
Вам может понравиться моя презентация Развертывание полнотекстового поиска , в которой я сравнил несколько различных решений для полнотекстовой индексации.