У меня есть простой запрос на выборку:
SELECT *
FROM `inventory`
WHERE account_id = "1"
AND marketplace_id = "2"
AND sku = "3"
AND `date` = "4"
У него есть условие в четырех полях, поэтому естественный индекс состоит из этих четырех полей.
У меня есть следующие индексы: ![enter image description here](https://i.stack.imgur.com/k7VIn.png)
и когда я объясняю запрос, я получаю:
Говоря, что он использует второй индекс из списка, а не третий или 4-й.
Если я использую USE INDEX(account_id__marketplace_id__sku__date)
в своем запросе, он успешно использует его и фильтрует 100%.
Я попытался ANALYZE TABLE
и OPTIMIZE TABLE
, чтобы перестроить индексы, но Ситуация остается прежней!
Из моего опыта работы с другими таблицами, если я сейчас отбрасываю индексы 2 и 3 и воссоздаю их так, чтобы самый большой индекс был первым в порядке, запрос выберет этот индекс Это означает, что он выбирает первое, которое соответствует максимальному соответствию.
- MySQL Версия сервера : 5.7.25-google-log
- phpMyAdmin MySQL версия клиента : 5.5.59