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

MySQL berhenti menggunakan indeks ketika batasan tambahan ditambahkan

Ini agak sulit untuk dijelaskan.

Kueri yang menggunakan indeks menggunakannya karena indeks adalah indeks "penutup". Artinya, semua kolom dalam indeks ada dalam kueri. Satu-satunya bagian dari indeks yang benar-benar digunakan secara efektif adalah kondisi pada latitude .

Biasanya indeks penutup akan memiliki hanya kolom yang disebutkan dalam kueri. Namun, kunci utama digunakan untuk mereferensikan catatan, jadi saya menduga bahwa users.Id adalah kunci utama di atas meja. Dan indeks sedang dipindai untuk nilai yang valid dari latitude .

Kueri yang tidak menggunakan indeks tidak menggunakannya karena dua alasan. Pertama, kondisi pada kolom adalah pertidaksamaan. Pencarian indeks hanya dapat menggunakan kondisi kesetaraan dan satu ketidaksetaraan. Itu berarti indeks hanya dapat digunakan untuk latitude dalam metodenya yang paling efektif. Kedua, kolom tambahan dalam kueri harus tetap membuka halaman data.

Dengan kata lain, pengoptimal sebenarnya mengatakan:"Mengapa repot-repot pergi ke indeks untuk memindai indeks dan kemudian memindai halaman data? Sebaliknya, saya hanya dapat memindai halaman data dan mendapatkan semuanya sekaligus."

Pertanyaan Anda berikutnya tidak diragukan lagi:"Tetapi bagaimana cara membuat kueri saya lebih cepat?" Saran saya adalah menyelidiki indeks spasial .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Saya perlu menemukan dan mengganti \n di bidang mysql

  2. Persistensi koneksi PHP MySQL

  3. Bagaimana saya bisa memverifikasi kode toko di mysql dan memperbarui tabel jika hasilnya benar?

  4. acak 2 catatan sesuai dengan posisi dan urutan berdasarkan posisi

  5. pilih 30 baris acak di mana jumlah jumlah =x