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

MySQL:Mengapa ID ke-5 dalam klausa IN secara drastis mengubah rencana kueri?

Seperti yang telah Anda tunjukkan, MySQL memiliki dua rencana kueri alternatif untuk kueri dengan ORDER BY ... LIMIT n :

  1. Baca semua baris yang memenuhi syarat, urutkan, dan pilih n baris teratas.
  2. Baca baris dalam urutan yang diurutkan dan hentikan saat n baris kualifikasi telah ditemukan.

Untuk memutuskan opsi mana yang lebih baik, pengoptimal perlu memperkirakan efek pemfilteran dari kondisi WHERE Anda. Ini tidak langsung, terutama untuk kolom yang tidak diindeks, atau untuk kolom di mana nilai-nilai berkorelasi. Dalam kasus Anda, seseorang mungkin harus membaca lebih banyak tabel dalam urutan yang diurutkan untuk menemukan 25 baris pertama yang memenuhi syarat daripada yang diharapkan pengoptimal.

Ada beberapa peningkatan dalam cara LIMIT kueri ditangani, baik di rilis 5.6 yang lebih baru (Anda menjalankan rilis pra-GA!), dan di rilis yang lebih baru (5.7, 8.0). Saya sarankan Anda mencoba meningkatkan ke rilis yang lebih baru, dan lihat apakah ini masih menjadi masalah.

Secara umum, jika Anda ingin memahami keputusan perencana kueri, Anda harus melihat pelacakan pengoptimal untuk kueri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menyimpan hubungan dua arah dalam RDBMS seperti MySQL?

  2. mysql_query hanya mengembalikan tipe string untuk tipe int/fload db

  3. Ubah format tanggal (dalam DB atau keluaran) menjadi hh/bb/tttt - PHP MySQL

  4. MySQL - Mengurangi nilai dari baris sebelumnya, kelompokkan menurut

  5. Nilai datetime salah saat mengatur Django dengan MySQL