Я везде искал свою проблему, но не нашел однозначного ответа.
База данных: MySQL
Даны три числовых поля a, b, c и одна дата-время, поданные d, все проиндексированы отдельно
В таблице участвуют 10 мил. записей.
Два числа n, m
У меня есть базовый запрос:
select * where (a=n or b=n) and c IN(m) Order by d DESC
(n может быть любым числом, m может быть любым числом от 1 до 9)
У меня также есть отдельный индекс для каждого из них. Я пробовал индексы на AC и BC, но безуспешно.
В моей среде разработки я всегда получаю слияние индексов, что делает запрос быстрым, даже если он создает файловую сортировку по какой-то причине, которая меня не особо волнует.
Но на производстве (другая одна и та же схема / данные) этого не происходит, что бы я ни делал.
Моим обходным решением этой странной проблемы было превращение запроса в следующий оператор:
От:
select * where (a=n or b=n) and c IN(m) ORDER BY d desc
Для того, чтобы:
select * where (a=n or b=n) and c IN(m,'m') ORDER BY d desc
И это также привело к запросу индекса слияния в производственной среде
что для меня в основном означает, что где-то есть кэш плана выполнения, и я не могу понять, где очистить этот кэш (если он действительно есть)
Мне нужно знать, как я могу указать производственной среде правильно использовать этот индекс в первом операторе.
Как примечание … по какой-то причине запрос объяснения говорит мне, что d — это индекс, используемый при производстве при объяснении запроса.
Мне нужно знать, как я могу указать производственной среде правильно использовать этот индекс в первом операторе.
Используйте синтаксис «индекс силы».
Если вы вставите CREATE TABLE & ОБЪЯСНИТЕ вывод для таблиц & вовлеченные запросы (соответственно) на dev & производство мы можем сузить до пары вещей. Может также помочь узнать оперативную память, доступную на каждой машине.
пс:
В моей среде разработки я всегда получаю слияние индексов, что делает запрос быстрым, даже если он создает файловую сортировку по какой-то причине, которая меня не особо волнует.
сортировка по д, которого нет в вашем индексе
Других решений пока нет …