2014-02-04 3 views
0

У меня есть таблица клиентов, имеющая столбец, имя которого является varchar (255). В приложении у нас есть функция поиска по имени. У нас в этой таблице около 8 миллионов записей. Запрос очень очевиден.MySQL: оптимизируйте производительность поиска в столбце varchar

SELECT customer_table_columns FROM customer_table WHERE customer_name 
LIKE '%user input customer name%'; 

Теперь этот запрос выполняется значительно медленнее (занимает до минуты), и это раздражает пользователей. Мне было интересно, есть ли способ повысить производительность этого запроса.

В этом столбце есть индекс, но тип индекса не определен. Параметры для типа индекса: FULLTEXT, PRIMARY и UNIQUE.

+0

Можете ли вы опубликовать схему таблицы? Использование индекса для столбца должно быть значительно лучше в скорости запросов, но другие вещи, такие как нормализация данных для разделения таблиц и использование внешних ключей, могут помочь сортировать время и т. Д. – helion3

+0

MySQL и «LIKE%» и «миллионы записей» не позволяют, т работать хорошо. Вы действительно выполняете полное сканирование таблицы и не имеете магического решения. Проверить ответ @ http://stackoverflow.com/a/11419105/1306385 –

ответ

1

Ваш запрос выполняется медленно, потому что у вас есть подстановочный знак в начале строки поиска (то есть %).

С такими запросами MySQL необходимо выполнить полное сканирование таблицы. И вы не можете с этим поделать.

Одним из вариантов является использование полного текстового индекса для хранения имен. Это позволит быстро выполнять поиск слов в префиксах имени и слова.

Смежные вопросы