Mysql
 sql >> база данни >  >> RDS >> Mysql

Клауза IN не използва индекс

Ще изляза на крайник и ще кажа, че е така, защото използвате MyISAM двигателя.

Работи перфектно с INNODB, както може да се види в този отговор моя.

Ще се опитам да събудя поне 1 почетна референция по въпроса.

Тук Тип на присъединяване на диапазона , явно фокус на INNODB, тъй като е двигателът по подразбиране. И когато не е изрично упоменато в ръководството в някаква йерархия на документацията, се предполага.

Забележете, няма нищо съседно за идентификатора в моя пример връзка. Това означава, че не се фокусирайте върху type=range в неговия изход EXPLAIN. Скоростта се достига чрез оптимизатора (CBO).

cardinality в моя пример е много висок (4,3 милиона). Броят на целевите идентификатори е сравнително малък (1000). Използва се индексът.

Вашата ситуация може да е обратната:вашата мощност може да е невероятно ниска, като 3, и оптимизаторът решава да се откаже от използването на индекса.

За да проверите cardinality на вашия индекс , вижте страницата наръчник ПОКАЗВАНЕ НА ИНДЕКС Синтаксис .

Просто обаждане като:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изчислете сумата от типа време с помощта на sql

  2. Laravel 5 използва условие OR с BETWEEN

  3. Проверка за празен резултат (PHP, PDO и MySQL)

  4. Как да предам списък с идентификатори на съхранената процедура на MySQL?

  5. как да извлека данни от две таблици в mysql?