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

Kinerja MYSQL ATAU vs IN

Saya perlu mengetahui hal ini dengan pasti, jadi saya membandingkan kedua metode tersebut. Saya secara konsisten menemukan IN menjadi jauh lebih cepat daripada menggunakan OR .

Jangan percaya orang yang memberikan "pendapat" mereka, sains adalah tentang pengujian dan bukti.

Saya menjalankan loop 1000x kueri yang setara (untuk konsistensi, saya menggunakan sql_no_cache ):

IN :2.34969592094s

OR :5.83781504631s

Pembaruan:
(Saya tidak memiliki kode sumber untuk pengujian asli, seperti yang dilakukan 6 tahun yang lalu, meskipun hasilnya dalam kisaran yang sama dengan pengujian ini)

Dalam permintaan beberapa kode sampel untuk menguji ini, berikut adalah kasus penggunaan yang paling sederhana. Menggunakan Eloquent untuk kesederhanaan sintaks, setara SQL mentah mengeksekusi hal yang sama.

$t = microtime(true); 
for($i=0; $i<10000; $i++):
$q = DB::table('users')->where('id',1)
    ->orWhere('id',2)
    ->orWhere('id',3)
    ->orWhere('id',4)
    ->orWhere('id',5)
    ->orWhere('id',6)
    ->orWhere('id',7)
    ->orWhere('id',8)
    ->orWhere('id',9)
    ->orWhere('id',10)
    ->orWhere('id',11)
    ->orWhere('id',12)
    ->orWhere('id',13)
    ->orWhere('id',14)
    ->orWhere('id',15)
    ->orWhere('id',16)
    ->orWhere('id',17)
    ->orWhere('id',18)
    ->orWhere('id',19)
    ->orWhere('id',20)->get();
endfor;
$t2 = microtime(true); 
echo $t."\n".$t2."\n".($t2-$t)."\n";

1482080514.3635
1482080517.3713
3.0078368186951

$t = microtime(true); 
for($i=0; $i<10000; $i++): 
$q = DB::table('users')->whereIn('id',[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])->get(); 
endfor; 
$t2 = microtime(true); 
echo $t."\n".$t2."\n".($t2-$t)."\n";

1482080534.0185
1482080536.178
2.1595389842987



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Alat Baris Perintah yang Berguna untuk Memantau Kinerja MySQL di Linux

  2. Cara Mengimpor Database Menggunakan phpMyAdmin

  3. MySQL:Rincian cepat dari jenis gabungan

  4. hasilkan hari dari rentang tanggal

  5. Memahami Tampilan dalam SQL