Ik ga uit de bol en zeg dat het komt omdat je de MyISAM-engine gebruikt.
Het werkt prima met INNODB zoals te zien is in dit Antwoord van mij.
Ik zal proberen om minstens 1 eervolle referentie over de kwestie op te schrikken.
Hier, Het bereik Join Type , duidelijk een INNODB-focus omdat het de standaardengine is. En wanneer niet expliciet vermeld in de handleiding in een documentatiehiërarchie, wordt dit verondersteld.
Let op, er is niets aangrenzends aan de id's in mijn voorbeeldlink. Dit betekent:focus niet te veel op type=range
in de EXPLAIN-uitvoer. De snelheid komt tot stand via de Optimizer (de CBO).
De cardinality
in mijn voorbeeld is erg hoog (4,3 miljoen). Het aantal doel-ID's is relatief laag (1000). De index wordt gebruikt.
Uw situatie kan het tegenovergestelde zijn:uw kardinaliteit kan ongelooflijk laag zijn, zoals 3, en de optimizer besluit het gebruik van de index te staken.
Om uw index cardinality
te controleren , zie de handleidingpagina SHOW INDEX-syntaxis
.
Een simpele oproep zoals:
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 | | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+