Как ускорить ВЫБОР.. КАК Запросы в MySQL на нескольких столбцах?

У меня есть таблица MySQL, для которой я делаю очень частый SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%' запросы. Какой-либо вид индекса помог бы вещам скорости встать?

В таблице существует несколько миллионов записей. Если бы существует что-нибудь, что ускорило бы поиск, будет он серьезно влиять на использование диска файлами базы данных и скоростью INSERT и DELETE операторы? (нет UPDATE когда-либо выполняется),

Обновление: Быстро после регистрации, я видел большую информацию и дискуссию о пути LIKE используется в запросе; я хотел бы указать, что решение должно использовать LIKE '%text%' (то есть, текст, который я ищу, предварительно ожидается и добавляется с подстановочным знаком %). База данных также должна быть локальной, по многим причинам, включая безопасность.

44
задан kmindi 1 August 2012 в 09:47
поделиться

3 ответа

Индекс не ускорит запрос, так как для текстовых столбцов индексы работают путем индексирования N символов, начинающихся слева. Когда вы делаете LIKE '%text%', он не может использовать индекс, потому что перед текстом может быть переменное количество символов.

То, что вы должны делать, это вовсе не использовать такой запрос. Вместо этого вы должны использовать что-то вроде FTS (Full Text Search), который MySQL поддерживает для таблиц MyISAM. Также довольно просто сделать такую систему индексации самостоятельно для не-MyISAM таблиц, вам просто нужна отдельная индексная таблица, в которой вы храните слова и их соответствующие ID в реальной таблице.

Обновление

Полнотекстовый поиск доступен для таблиц InnoDB с MySQL 5.6+.

64
ответ дан 26 November 2019 в 21:49
поделиться

Индекс не поможет подходит для текста с ведущим подстановочным знаком, индекс может быть использован для :

LIKE 'text%'

Но я предполагаю, что не сократит его. Для этого типа запроса вы действительно должны смотреть на полный текстовый поставщик поиска, если вы хотите масштабировать количество записей, которые вы можете искать. Мой предпочтительный провайдер SPHINX , очень полнофункциональный / быстрый и т. Д. Lucene может также стоить взгляда. Индекс FullText на таблице MyISAM также будет работать, но в конечном итоге преследует MyIsam для любой базы данных, которая имеет значительное количество пишетов, не хорошая идея.

21
ответ дан 26 November 2019 в 21:49
поделиться

Индекс может Для ускорения запросов, где критерии поиска начинаются с подстановки:

как «% текста%»

, индекс может (и может быть, в зависимости от Селективность), используемая для поиска условий формы:

Как и «текст%»

13
ответ дан 26 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

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