sql >> Databasteknik >  >> RDS >> Mysql

IN-satsen använder inte index

Jag kommer att gå ut och säga att det är för att du använder MyISAM-motorn.

Det fungerar perfekt med INNODB som kan ses i detta svar av mig.

Jag ska försöka få fram minst en hedervärd referens i frågan.

Här, The range Join Type , helt klart ett INNODB-fokus eftersom det är standardmotorn. Och när det inte uttryckligen nämns i manualen i någon dokumentationshierarki, antas det.

Observera att det inte finns något sammanhängande med id:n i min exempellänk. Det betyder, överfokusera inte på type=range i dess EXPLAIN-utgång. Hastigheten uppnås via Optimizern (CBO).

cardinality i mitt exempel är mycket hög (4,3 miljoner). Antalet mål-id är relativt lågt (1000). Indexet används.

Din situation kan vara den motsatta:din kardinalitet kan vara otroligt låg, som 3, och optimeraren beslutar sig för att överge användningen av indexet.

För att kontrollera ditt index cardinality , se manualsidan VISA INDEX-syntax .

Ett enkelt samtal 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      |         |               |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+


  1. Läs och importera XLSX (Excel)-fil i Oracle

  2. MySQL:Ogiltig användning av gruppfunktionen

  3. Hur hämtar man resultat från MySQL-rad med flera kolumner med samma namn med PHP?

  4. Designmönster för anpassade fält i relationsdatabasen