Půjdu ven a řeknu, že je to proto, že používáte motor MyISAM.
S INNODB to funguje naprosto dobře, jak je vidět v této odpovědi můj.
Pokusím se v této záležitosti vystrašit alespoň 1 čestný odkaz.
Zde Typ spojení rozsahu , jasně zaměření INNODB, protože je to výchozí engine. A pokud to není výslovně uvedeno v příručce v nějaké hierarchii dokumentace, předpokládá se.
Všimněte si, že na id v mém příkladu odkazu není nic souvislého. To znamená, že se nezaměřujte na type=range
ve svém výstupu EXPLAIN. Rychlost je dosažena pomocí Optimalizátoru (CBO).
cardinality
v mém příkladu je velmi vysoká (4,3 milionu). Počty cílového ID jsou relativně nízké (1000). Je použit index.
Vaše situace může být opačná:vaše mohutnost může být neuvěřitelně nízká, například 3, a optimalizátor se rozhodne opustit používání indexu.
Chcete-li zkontrolovat svůj index cardinality
, viz manuálová stránka SHOW INDEX Syntax
.
Jednoduché volání jako:
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 | | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+