Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiệu suất MYSQL HOẶC so với IN

Tôi cần biết điều này chắc chắn, vì vậy tôi đã chuẩn hóa cả hai phương pháp. Tôi luôn tìm thấy IN nhanh hơn nhiều so với việc sử dụng OR .

Đừng tin những người đưa ra "ý kiến" của họ, khoa học là tất cả về thử nghiệm và bằng chứng.

Tôi đã chạy một vòng lặp gấp 1000 lần các truy vấn tương đương (để nhất quán, tôi đã sử dụng sql_no_cache ):

IN :2,34969592094 giây

OR :5,83781504631 giây

Cập nhật:
(Tôi không có mã nguồn cho thử nghiệm ban đầu, như cách đây 6 năm, mặc dù nó trả về kết quả trong cùng phạm vi với thử nghiệm này)

Yêu cầu một số mã mẫu để kiểm tra điều này, đây là trường hợp sử dụng đơn giản nhất có thể. Sử dụng Eloquent để đơn giản hóa cú pháp, SQL thô tương đương sẽ thực thi giống nhau.

$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. Cú pháp TẠO CƠ SỞ DỮ LIỆU SQL - Được DBMS liệt kê

  2. So sánh hai cơ sở dữ liệu MySQL

  3. Sử dụng Jquery Ajax để lấy dữ liệu từ Mysql

  4. Mẹo hữu ích để khắc phục sự cố thường gặp trong MySQL

  5. Xóa các hàng sql trong đó ID không khớp với bảng khác