Jag kommer att gå ut och säga att det är för att du använder MyISAM-motorn.
Det fungerar perfekt med INNODB som kan ses i detta svar av mig.
Jag ska försöka få fram minst en hedervärd referens i frågan.
Här, The range Join Type , helt klart ett INNODB-fokus eftersom det är standardmotorn. Och när det inte uttryckligen nämns i manualen i någon dokumentationshierarki, antas det.
Observera att det inte finns något sammanhängande med id:n i min exempellänk. Det betyder, överfokusera inte på type=range
i dess EXPLAIN-utgång. Hastigheten uppnås via Optimizern (CBO).
cardinality
i mitt exempel är mycket hög (4,3 miljoner). Antalet mål-id är relativt lågt (1000). Indexet används.
Din situation kan vara den motsatta:din kardinalitet kan vara otroligt låg, som 3, och optimeraren beslutar sig för att överge användningen av indexet.
För att kontrollera ditt index cardinality
, se manualsidan VISA INDEX-syntax
.
Ett enkelt samtal som:
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 | | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+