Почему mysql SELECT с "LIKE word% word2" в предложении where не использует индекс

Запрос большой и включает в себя длинный список тестов LIKE в предложении WHERE, например... SELECT cola FROM t WHERE (colX LIKE 'word1% word2%' OR colX LIKE 'word3% word4%' ИЛИ...);

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

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

1 ответ

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

licensed under cc by-sa 3.0 with attribution.