Я был занят изменением некоторых SQL-запросов, чтобы они выглядели более читабельными для человеческого глаза, мне также сказали, что они будут, возможно, на 5-10% быстрее.
Предыдущие операторы SQL будут выглядеть так.
SELECT * FROM team WHERE Team1='Джо Блоггс' ИЛИ Team2='Джо Блоггс' ИЛИ Team3='Джо Блоггс'
я изменил его на
ВЫБЕРИТЕ * ИЗ команд, ГДЕ 'Джо Блоггс' В (Команда1,Команда2,Команда3)
Новый запрос примерно в 10 раз медленнее, после проверки того, что может быть причиной, я обнаружил, что он не использует никаких индексов, и даже если я попытаюсь принудительно ввести индекс, он все равно не будет его использовать.
В таблице около 120 000 строк, и я не могу изменить формат таблицы, так как другие приложения, к которым у меня нет доступа, используют ее. Все столбцы Team1,Team2,Team3 имеют тип VARCHAR(45)
Кто-нибудь может объяснить, почему индексы используются для исходного запроса, а не для нового? Я прочитал тонну страниц, но не могу найти ответ, я читал, что возможно, что mysql определяет, что быстрее не использовать индекс, однако здесь этого не должно быть, поскольку запрос IN почти в 10 раз медленнее.
Множественные ИЛИ SELECT (запустить 1000 раз без кэша) — истекло 12,863906860352 IN SELECT (выполнить 1000 раз без кэша) — истекло 122,73787903786
Спасибо за уделенное время.
EXPLAIN SELECT ...
для двух версий. В частности, я ищу союз слияния индексов. - person Rick James   schedule 17.08.2018