Jeg vil gå ud og sige, at det er fordi du bruger MyISAM-motoren.
Det fungerer perfekt med INNODB, som det kan ses i dette svar af mine.
Jeg vil forsøge at få mindst én ærefuld reference op i sagen.
Her, Rækkevidden Join Type , klart et INNODB-fokus, da det er standardmotoren. Og når det ikke udtrykkeligt er nævnt i manualen i et eller andet dokumentationshierarki, antages det.
Bemærk, der er intet sammenhængende ved id'erne i mit eksempellink. Det betyder, at du ikke hyperfokuserer på type=range
i sin EXPLAIN-udgang. Hastigheden opnås via Optimizer (CBO'en).
cardinality
i mit eksempel er meget høj (4,3 mio.). Mål-id-antallet er relativt lavt (1000). Indekset bruges.
Din situation kan være den modsatte:din kardinalitet kan være utrolig lav, f.eks. 3, og optimeringsværktøjet beslutter at opgive brugen af indekset.
For at kontrollere dit indeks cardinality
, se manualsiden VIS INDEX-syntaks
.
Et simpelt opkald så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 | | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+