Pójdę na kończynę i powiem, że to dlatego, że używasz silnika MyISAM.
Działa doskonale z INNODB, co można zobaczyć w tej Odpowiedź mojego.
Postaram się wywołać co najmniej 1 honorowe referencje w tej sprawie.
Tutaj Typ łączenia zakresu , wyraźnie koncentruje się na INNODB, ponieważ jest to domyślny aparat. A jeśli nie jest to wyraźnie wymienione w podręczniku w jakiejś hierarchii dokumentacji, zakłada się.
Uwaga, w moim przykładowym łączu nie ma nic ciągłego w identyfikatorze. To znaczy, nie koncentruj się na type=range
w swoim wyjściu EXPLAIN. Prędkość jest osiągana za pomocą Optymalizatora (CBO).
cardinality
w moim przykładzie jest bardzo wysoka (4,3 mln). Liczba identyfikatorów docelowych jest stosunkowo niska (1000). Używany jest indeks.
Twoja sytuacja może być odwrotna:Twoja kardynalność może być niewiarygodnie niska, np. 3, a optymalizator zdecyduje się zrezygnować z używania indeksu.
Aby sprawdzić indeks cardinality
, zobacz stronę podręcznika POKAŻ składnię INDEKSU
.
Proste wywołanie, takie jak:
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 | | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+