sql >> Database teknologi >  >> RDS >> Mysql

IN-klausul bruger ikke indeks

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


  1. Indekserer du en MySql TEXT kolonne?

  2. Kan MySQL FIND_IN_SET eller tilsvarende fås til at bruge indekser?

  3. Hvordan kan jeg rekursivt få det overordnede ID for rækker i denne MySQL-tabel?

  4. Sådan opnår du PCI-overensstemmelse for MySQL &MariaDB med ClusterControl - The Replay