Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Klausa IN tidak menggunakan indeks

Saya akan mengambil risiko dan mengatakan itu karena Anda menggunakan mesin MyISAM.

Ini bekerja dengan baik dengan INNODB seperti yang dapat dilihat di Jawaban ini milikku.

Saya akan mencoba untuk menakut-nakuti setidaknya 1 referensi terhormat tentang masalah ini.

Di sini, Rentang Jenis Gabung , jelas merupakan fokus INNODB karena merupakan mesin default. Dan ketika tidak disebutkan secara eksplisit dalam manual dalam beberapa hierarki dokumentasi, itu dianggap.

Catatan, tidak ada yang bersebelahan dengan id di tautan contoh saya. Artinya, jangan terlalu fokus pada type=range dalam output EXPLAIN-nya. Kecepatan dicapai melalui Pengoptimal (CBO).

cardinality dalam contoh saya sangat tinggi (4,3 Juta). Jumlah target id relatif rendah (1000). Indeks digunakan.

Situasi Anda mungkin sebaliknya:kardinalitas Anda mungkin sangat rendah, seperti 3, dan pengoptimal memutuskan untuk mengabaikan penggunaan indeks.

Untuk memeriksa cardinality indeks Anda , lihat Halaman Manual TAMPILKAN Sintaks INDEKS .

Panggilan sederhana seperti:

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. Sisipkan massal atau perbarui dengan Hibernate?

  2. Bagaimana menghubungkan ke MySQL yang berjalan di Docker dari mesin host

  3. Bagaimana MySQL menangani sisipan bersamaan?

  4. SQL fixed-value IN() vs. INNER JOIN performance

  5. Mengapa begitu lama untuk mengganti nama kolom di mysql?