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

Saat bergabung ke tabel yang sangat kecil/kosong mengapa MySQL melakukan pemindaian penuh meskipun saya menggunakan LIMIT?

Pengoptimal MySQL akan memutuskan urutan/metode bergabung terlebih dahulu, dan kemudian memeriksa apakah, untuk urutan gabung yang dipilih, dimungkinkan untuk menghindari pengurutan dengan menggunakan indeks. Untuk kueri lambat dalam pertanyaan ini, pengoptimal telah memutuskan untuk menggunakan gabungan Block-Nested-Loop (BNL).

BNL biasanya lebih cepat daripada menggunakan indeks ketika salah satu tabel sangat kecil (dan tidak ada LIMIT).

Namun, dengan BNL, baris tidak harus datang dalam urutan yang diberikan oleh tabel pertama. Oleh karena itu, hasil gabungan perlu diurutkan sebelum menerapkan LIMIT.

Anda dapat mematikan BNL dengan set optimizer_switch = 'block_nested_loop=off';



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Pivot + Menghitung

  2. Bagaimana membatasi waktu eksekusi sql

  3. Bangun Antarmuka PHP CRUD dengan Cepat Dengan Alat Generator CRUD Lanjutan PDO

  4. Bagaimana cara menulis pernyataan SQL ini?

  5. Kinerja sub-kueri dalam klausa IN dengan tabel besar dalam kueri hapus