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

Apakah ada perbedaan performa antara BETWEEN dan IN dengan MySQL atau SQL pada umumnya?

BETWEEN harus mengungguli IN dalam hal ini (tetapi lakukan ukur dan periksa juga rencana eksekusi!), terutama sebagai n tumbuh dan sebagai statistik masih akurat. Mari kita asumsikan:

  • m adalah ukuran meja Anda
  • n adalah ukuran jangkauan Anda

Indeks dapat digunakan (n kecil dibandingkan dengan m )

  • Secara teori, BETWEEN dapat diimplementasikan dengan satu "pemindaian rentang" (Oracle berbicara) pada indeks kunci utama, dan kemudian melintasi paling banyak n simpul daun indeks. Kompleksitasnya adalah O(n + log m)

  • IN biasanya diimplementasikan sebagai rangkaian (loop) dari n "range scan" pada indeks kunci utama. Dengan m menjadi ukuran tabel, kompleksitas akan selalu O(n * log m) ... yang selalu lebih buruk (diabaikan untuk tabel yang sangat kecil m atau rentang yang sangat kecil n )

Indeks tidak dapat digunakan (n adalah bagian penting dari m )

Bagaimanapun, Anda akan mendapatkan pemindaian tabel lengkap dan mengevaluasi predikat pada setiap baris:

  • BETWEEN perlu mengevaluasi dua predikat:Satu untuk batas bawah dan satu untuk batas atas. Kompleksitasnya adalah O(m)

  • IN perlu mengevaluasi paling banyak n predikat. Kompleksitasnya adalah O(m * n) ... yang lagi-lagi selalu lebih buruk, atau mungkin O(m) jika database dapat mengoptimalkan IN list menjadi hashmap, bukan daftar predikat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menyalin Tabel di MySQL

  2. Bagaimana cara menggemakan baris acak dari database?

  3. Ambil 2 posting terakhir untuk setiap kategori

  4. Hapus hasil berulang dari kueri MySQL

  5. MySQL Pilih beberapa kolom BERBEDA berdasarkan keunikan satu baris?