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

Mengapa MySQL tidak menggunakan indeks untuk perbandingan yang lebih besar?

Anda mungkin akan lebih baik membiarkan MySql memutuskan rencana kueri. Ada kemungkinan besar bahwa melakukan pemindaian indeks akan kurang efisien daripada pemindaian tabel penuh.

Ada dua struktur data pada disk untuk tabel ini

  1. Tabel itu sendiri; dan
  2. Indeks B-Tree kunci utama.

Saat Anda menjalankan kueri, pengoptimal memiliki dua opsi tentang cara mengakses data:

SELECT * FROM userapplication WHERE application_id > 1025;

Menggunakan Indeks

  1. Pindai indeks B-Tree untuk menemukan alamat semua baris di mana application_id > 1025
  2. Baca halaman tabel yang sesuai untuk mendapatkan data untuk baris ini.

Tidak menggunakan Indeks

Pindai seluruh tabel, dan pilih catatan yang sesuai.

Memilih strategi terbaik

Tugas pengoptimal kueri adalah memilih strategi yang paling efisien untuk mendapatkan data yang Anda inginkan. Jika ada banyak baris dengan application_id > 1025 maka sebenarnya bisa kurang efisien menggunakan index. Misalnya jika 90% dari catatan memiliki application_id > 1025 maka pengoptimal kueri harus memindai sekitar 90% simpul daun dari indeks b-tree dan kemudian membaca setidaknya 90% tabel juga untuk mendapatkan data aktual; ini akan melibatkan membaca lebih banyak data dari disk daripada hanya memindai tabel.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Django MySQL saat bermigrasi

  2. Bagaimana cara menghindari karakter Sampah/sampah saat membaca data dari berbagai bahasa?

  3. Kesalahan PHP (MySQL):Peringatan:mysql_num_rows() mengharapkan parameter 1 menjadi sumber daya

  4. PHP:Jika record ada, tampilkan HTML, yang lain tidak menampilkan apa-apa

  5. bbPress:Cara menemukan pemetaan lampiran ke masing-masing posting