Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MYSQL या बनाम IN प्रदर्शन

मुझे यह निश्चित रूप से जानने की ज़रूरत थी, इसलिए मैंने दोनों विधियों को बेंचमार्क किया। मैंने लगातार IN found पाया OR . का उपयोग करने की तुलना में बहुत तेज़ होने के लिए ।

उन लोगों पर विश्वास न करें जो अपनी "राय" देते हैं, विज्ञान केवल परीक्षण और साक्ष्य के बारे में है।

मैंने 1000x समकक्ष प्रश्नों का एक लूप चलाया (स्थिरता के लिए, मैंने sql_no_cache का उपयोग किया था ):

IN :2.34969592094s

OR :5.83781504631s

अपडेट करें:
(मेरे पास मूल परीक्षण के लिए स्रोत कोड नहीं है, जैसा कि 6 साल पहले था, हालांकि यह इस परीक्षण के समान श्रेणी में परिणाम देता है)

इसका परीक्षण करने के लिए कुछ नमूना कोड के अनुरोध में, यहां सबसे सरल संभव उपयोग मामला है। वाक्य रचना सरलता के लिए वाक्पटु का उपयोग करते हुए, अपरिष्कृत SQL समकक्ष उसी को क्रियान्वित करता है।

$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. MySql में संयोजन त्रुटि का अवैध मिश्रण

  2. MySQL में DATETIME को DATE के रूप में कैसे डाला जाए?

  3. क्या मैं JDBC कनेक्शन पूलिंग का उपयोग कर रहा हूँ?

  4. क्या किसी तालिका में स्तंभ क्रम के बारे में चिंता करने का कोई कारण है?

  5. मुझे कैसे पता चलेगा कि मेरा डॉकटर mysql कंटेनर कब चालू है और mysql प्रश्न लेने के लिए तैयार है?