Я провел несколько тестов с помощью INDEXES и их расположения размещения столбцов в запросе.Перемещение столбцов MySQL Optimizer
Допустим, у меня есть этот запрос:
EXPLAIN SELECT * FROM `languages`
WHERE
`languages`.`active` = 1
AND `languages`.`code` = 'nl_nl';
И 2 INDEXES:
code
(UNIQUE)active
,code
(имеет дело с ORDER BY)
EXPLAIN
говорит, что возможно le - code,index__active__code
, но, как ни странно, он выбрал code
как ключевой.
Означает ли это, что оптимизатор запросов будет суетиться вокруг моих полей WHERE, чтобы они соответствовали одному или нескольким моим индексам лучше? Поэтому он сделает мой запрос:
SELECT * FROM `languages`
WHERE
`languages`.`code` = 'nl_nl'
AND `languages`.`active` = 1
?
Но тогда все же, почему он не решил получить индекс active, code
? Это потому, что соответствующий тип равен const
? Или UNIQUE всегда предпочитали?
Update:
Кроме того, это не имеет никакого смысла для меня:
EXPLAIN SELECT `id`, `property_id` FROM (`modeldimensions`) WHERE `model_id` = 11040 && `active` = 1;
Возможных ключи: unique__model_id_property_id,index_model_id__active
Но пока он выбрал unique__model_id_property_id
.
'SHOW CREATE TABLE' - может быть некоторое взаимодействие с ПК. Могут быть некоторые проблемы с типами данных. И т. Д. –