Ще изляза на крайник и ще кажа, че е така, защото използвате MyISAM двигателя.
Работи перфектно с INNODB, както може да се види в този отговор моя.
Ще се опитам да събудя поне 1 почетна референция по въпроса.
Тук Тип на присъединяване на диапазона , явно фокус на INNODB, тъй като е двигателът по подразбиране. И когато не е изрично упоменато в ръководството в някаква йерархия на документацията, се предполага.
Забележете, няма нищо съседно за идентификатора в моя пример връзка. Това означава, че не се фокусирайте върху type=range
в неговия изход EXPLAIN. Скоростта се достига чрез оптимизатора (CBO).
cardinality
в моя пример е много висок (4,3 милиона). Броят на целевите идентификатори е сравнително малък (1000). Използва се индексът.
Вашата ситуация може да е обратната:вашата мощност може да е невероятно ниска, като 3, и оптимизаторът решава да се откаже от използването на индекса.
За да проверите cardinality
на вашия индекс , вижте страницата наръчник ПОКАЗВАНЕ НА ИНДЕКС Синтаксис
.
Просто обаждане като:
show index from ratings;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| ratings | 0 | PRIMARY | 1 | id | A | 4313544 | NULL | NULL | | BTREE | | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+