sql >> Databáze >  >> RDS >> Mysql

Klauzule IN nepoužívá index

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      |         |               |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+


  1. Běžné chyby ER diagramu

  2. Spustit uloženou proceduru z funkce

  3. Odečtěte měsíc od data v MariaDB

  4. jak obnovit pohotovostní databázi z chybějícího archivního protokolu