Почему mysql SELECT с 'LIKE word% word2' в предложении where не использует индекс - PullRequest
3 голосов
/ 04 декабря 2010

Запрос большой и включает в себя длинный список тестов 'LIKE' в предложении WHERE, например, ... ВЫБЕРИТЕ КОЛ ИЗ ОТ ГДЕ (colX LIKE 'word1% word2%' OR colX LIKE 'word3% word4%' ИЛИ ЖЕ...);

colX имеет индекс. MySQL использует индекс, так как сравнение не начинается с «%». Проверяя с помощью EXPLAIN, я вижу, что когда строка SQL становится больше, mysql прекращает использовать индекс и начинает выполнять полное сканирование таблицы. Похоже, это связано с количеством тестов 'LIKE' в предложении where. На пороге я могу добавить еще один «LIKE», и он перестает использовать индекс и занимает в 10 раз больше времени, чем без дополнительного «LIKE».

Есть ли какая-нибудь переменная mysql, которая управляет таким поведением?

1 Ответ

1 голос
/ 04 декабря 2010

Я считаю, что если вы добавите FORCE INDEX [index_name], он будет использовать индекс в любом случае.Также проверьте Индекс подсказок документации .Значение sysvar_max_seeks_for_key также влияет на то, используется индекс или нет.Может быть, поможет изменить это значение на меньшее число.

...