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

MySQL tidak menggunakan indeks saat memeriksa =1 , tetapi menggunakannya dengan =0

Mengapa MySQL tidak menggunakan indeks?
MySQL tidak akan menggunakan indeks jika persentasenya besar dari baris memiliki nilai itu.

Mengapa menambahkan use index untuk kueri tidak berfungsi di sini
Menambahkan use index klausa tidak akan berpengaruh, karena use index hanya akan menyarankan yang indeks untuk digunakan, itu tidak akan menyarankan apakah akan menggunakan indeks atau tidak.

Peringatan saat menggunakan tabel pengujian dengan beberapa baris
Ini sangat menjengkelkan saat menggunakan tabel pengujian dengan beberapa baris karena MySQL akan menolak menggunakan indeks, dan sulit untuk melihat apa yang salah dengan kueri Anda.
Jadi, pastikan Anda menambahkan cukup banyak baris ke tabel pengujian untuk menjadikannya ujian yang realistis.

Apakah menggunakan indeks pada kolom kardinalitas rendah tidak berguna?
Pengindeksan pada kolom boolean tidak berguna seperti yang Anda pikirkan sebelum mengajukan pertanyaan ini.
Namun itu juga bukan tidak berguna baik.
Dengan InnoDB MySQL akan mencoba dan mengambil data menggunakan indeks jika memungkinkan, jika bidang boolean Anda memiliki indeks, kuerinya:

SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1

Dapat membaca semua data dalam indeks penutup untuk bool_field karena indeks sekunder di InnoDB selalu menyertakan indeks utama (id) juga.
Ini lebih cepat karena MySQL tidak harus membaca seluruh tabel ke dalam memori.

Di MyISAM ini tidak berfungsi dan MySQL akan memeriksa seluruh tabel.

Tapi saya bisa menggunakan force index
Anda bisa, tetapi pada indeks kardinalitas rendah akan membuat kueri Anda lebih lambat, bukan lebih cepat. Hanya menimpa indeks pada kueri yang kompleks dan hanya jika Anda mengetahui aturan yang digunakan MySQL untuk memilih indeks.

Tautan:
Lihat:http://dev.mysql .com/doc/refman/5.1/en/mysql-indexes.html
dan: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

Jika Anda menginginkan buku tentang topik ini:baca
MySQL performa tinggi:http://oreilly.com /catalog/9780596003067



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperbaiki celah di id baris tabel mysql setelah kami menghapus beberapa di antaranya

  2. Cara menggunakan kunci asing dengan PHP

  3. Snow Leopard + Ruby 1.9.1 + Permata MySQL =Masalah besar

  4. Tetapkan hasil variabel, dari kueri

  5. Menggunakan MySQLi untuk MEMASUKKAN Data ke dalam Basis Data