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

MySql menolak untuk menggunakan indeks

MySQL tidak akan menggunakan indeks jika memperkirakan bahwa ia akan memilih sebagian besar tabel secara signifikan, dan menurutnya pemindaian tabel sebenarnya lebih efisien dalam kasus tersebut.

Dengan analogi, inilah alasan indeks sebuah buku tidak mengandung kata-kata yang sangat umum seperti "the" -- karena akan membuang-buang waktu untuk mencari kata dalam indeks dan menemukan daftar nomor halaman adalah daftar yang sangat panjang, bahkan setiap halaman dalam buku. Akan lebih efisien untuk hanya membaca sampul buku ke sampul.

Pengalaman saya adalah ini terjadi di MySQL jika kriteria pencarian kueri akan cocok dengan lebih dari 20% tabel, dan ini biasanya titik persilangan yang tepat. Mungkin ada beberapa variasi berdasarkan tipe data, ukuran tabel, dll.

Anda dapat memberikan petunjuk ke MySQL untuk meyakinkannya bahwa pemindaian tabel akan sangat mahal, jadi kemungkinan besar akan menggunakan indeks. Ini biasanya tidak diperlukan, tetapi Anda dapat melakukannya seperti ini:

SELECT taskid FROM tasktransitions FORCE INDEX (transitiondate_ix)
WHERE transitiondate>'2013-09-31 00:00:00';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO lastInsertId tidak berfungsi pada transaksi?

  2. MYSQL - PILIH data dari nama tabel dinamis

  3. MICROSECOND() Contoh – MySQL

  4. SQLAlchemy PADA PEMBARUAN KUNCI DUPLICATE

  5. JPA TemporalType.Date memberikan tanggal yang salah