Как я могу ускорить этот запрос Select Distinct в MySQL - PullRequest
0 голосов
/ 15 октября 2011

Я внедряю поле автозаполнения на веб-сайте, и моя конечная точка запрашивает MySQL для получения данных. Это конкретное поле можно извлечь только из «списка» базы данных, в которой содержится около 600 000 записей, из которых только 4000 являются уникальными. Один раз в день будет добавлен новый уникальный элемент списка. Я использую такой вызов, где запрос - это то, что пользователь начал вводить в поле автозаполнения:

SELECT DISTINCT item FROM list WHERE item like '%query%' LIMIT 10;

Этот запрос занимает около 0,8 миллисекунды, и большая часть времени связана с SELECT DISTINCT, я полагаю. Есть ли способ повысить производительность этой задачи? Я в порядке, чтобы создавать новые таблицы / представления, но я не уверен, что поможет.

1 Ответ

2 голосов
/ 15 октября 2011

Когда вы используете знак% в начале запроса с LIKE, индекс не будет использоваться, и каждая строка вашей таблицы будет сканироваться, независимо от того, как выглядят ваши индексы.

Подумайте оадресная книга с вкладками букв, если я ищу 'Mads%', я могу указать пальцем на букву M и прочитать оттуда, но если я ищу '%dse%', я должен прочитать каждую запись.

  • Если вы можете, вы должны удалить знак процента в начале строки, в этом случае будет использоваться индекс на item (обязательно добавьте его, вы также можете проиндексировать детальполя в случае, если это длинное поле).
  • В противном случае вам следует использовать полнотекстовый поиск .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...