2008-10-05 13 views
56

मैं जानना चाहता हूं कि किसी को इस डिचोटोमी के साथ कोई पहला अनुभव है या नहीं। कुछ ब्लॉग कहते हैं कि mysql एक्सटेंशन mysqli से तेज़ है। क्या ये सच है?PHP- MySQL या MySQLi में सबसे तेज़ कौन सा है?

और मैं केवल गति के बारे में पूछ रहा हूं। मुझे पता है कि mysqli में ऐसी विशेषताएं हैं जो पुराने एक्सटेंशन में मौजूद नहीं हैं।

उत्तर

3

ceejayoz से जुड़े बेंचमार्क के लिए सभी Google परिणामों के मुताबिक ऐसा लगता है कि MySQL सभी बेंचमार्क परीक्षणों में MySQLi से कम से कम थोड़ा तेज है। मैं विवरणों के परिणामों को पढ़ने की सिफारिश करता हूं लेकिन सिर्फ यह अनुमान लगाया कि मैं कुछ ऐसा पोस्ट करूंगा जो सीधे प्रश्न का उत्तर दे और सीजयोज के जवाब को टक्कर दे।

+0

लिंक नीचे ... – Pacerier

87

MySQL एक्सटेंशन MySQLi से बहुत अधिक तेज है जो मैंने देखा है। अंतर इतना मामूली है, हालांकि, यह दोनों के बीच निर्णय लेने के लिए शायद आपका मानदंड नहीं होना चाहिए।

अन्य कारक mysql और mysqli के बीच प्रदर्शन में अंतर को बौना करते हैं। Mod_php या FastCGI का उपयोग करना, एपीसी जैसे बाइटकोड कैश, या डाटाबेस हिट को कम करने के लिए डेटा कैशिंग को समझदारी से उपयोग करना, MySQL एक्सटेंशन की पसंद से PHP स्क्रिप्ट के समग्र प्रदर्शन के लिए कहीं अधिक फायदेमंद है।

पैसा बुद्धिमान और पाउंड मूर्ख मत बनो! :-)

+28

+1 बस अंतिम लाइन के लिए। अम्मा चोरी कर रही है! – Mathew

+1

तब mysql और mysqli का उपयोग करने के बीच सबसे बड़ा अंतर क्या है? मुझे केवल mysqli का उपयोग करने के लिए सिखाया गया था और मुझे कभी नहीं बताया गया था क्यों। क्या आप मुझे एक संक्षिप्त स्पष्टीकरण दे सकते हैं? धन्यवाद – Drewdin

+1

ext/mysqli अंतर्निहित MySQL API की अधिक विशेषताओं का समर्थन करता है, जैसे पैरामीटर और पैरामीटर के साथ तैयार प्रश्न। इसके अलावा आप एक ऑब्जेक्ट उन्मुख तरीके से mysqli फ़ंक्शंस को कॉल कर सकते हैं। –

3

PHP दस्तावेज़ में एक अच्छा comparison of mysql, mysqli, and PDO है। मुझे पता है कि आपने केवल गति के बारे में पूछा है, लेकिन अन्य इसे उपयोगी पाते हैं। यह विकल्पों के बीच फीचर अंतर के बारे में बात करता है।

10

"यह निर्भर करता है।"

उदाहरण के लिए, PHP MySQL vs MySQLi Database Access Metrics और बाद की टिप्पणियां दोनों तरीकों से तर्क बताती हैं।

यदि आपके पास परिपक्व डेटाबेस और कोडबेस है, तो कुछ परीक्षण करें और देखें कि आपके सिस्टम में क्या काम करता है। यदि नहीं, समयपूर्व अनुकूलन के बारे में चिंता करना बंद करो।

2

जब तक मिलीसेकंड कोई फर्क नहीं पड़ता तो चिंता न करें। निश्चित रूप से यदि आपको mysqli द्वारा प्रदान की गई अतिरिक्त कार्यक्षमता की आवश्यकता नहीं है तो बस कोशिश की गई और परीक्षण की गई mysql के साथ चिपके रहें।

4

हो सकता है, यह सही चुनाव :: The Plot to Kill PHP MySQL Extension

"हाँ, आप इसे सही पढ़ा बनाने के लिए एक कारण हो सकता है। हाल ही में, फिलिप ओल्सन मेलिंग सूची को मारने के लिए एक प्रस्ताव पीएचपी internals के लिए भेजा भविष्य में PHP संस्करणों में मूल PHP MySQL एक्सटेंशन। "

+2

मैंने परीक्षण किया। मेरे लिए एक पुराना mysql एक्सटेंशन mysqli एक्सटेंशन –

+0

@Jeff_Alieffson से कुछ तेज़ नहीं है, कुछ टेस्टेबल मीट्रिक दिए बिना बहुत मदद नहीं करता है – RiggsFolly

4

PHP प्रोग्रामिंग भाषा के संबंध में, MySQL पुराना डेटाबेस ड्राइवर है, और MySQLi बेहतर ड्राइवर है। MySQLi MySQL 5 की नई विशेषताओं का लाभ उठाता है।

php से लिया MySQLi की विशेषताएं।शुद्ध साइट:

  • वस्तु उन्मुख इंटरफ़ेस तैयार बयान के लिए
  • समर्थन एकाधिक बयान के लिए
  • समर्थन
  • लेन-देन के लिए
  • समर्थन
  • बढ़ी डिबगिंग क्षमताओं
  • एंबेडेड सर्वर समर्थन
+8

यह सुनिश्चित नहीं है कि इसे कई बार क्यों चुना गया है। मैं इसे कम मतदान कर रहा हूं क्योंकि यह वास्तविक प्रश्न का उत्तर नहीं देता है। –

+3

प्रश्न गति के बारे में है, सौंदर्य या अतिरिक्त सुविधाओं के बारे में नहीं। –

+0

मुझे लगता है कि यह वही बात है जो मायने रखती है, भले ही MYSQL MySQLi को 'थोड़ा' तेज़ कर दे, मैं जल्द ही या बाद में MYSQL पर सिस्टम नहीं बनाऊंगा क्योंकि यह जल्द ही हो सकता है या बाद में यह वंचित हो सकता है, इसलिए अपने सभी डीबी इंजन और किसी भी संबंधित कोड को फिर से लिखें ! –

6

देखें http://php.net/manual/en/mysqlinfo.api.choosing.php

सभी तीन एक्सटेंशन का समग्र प्रदर्शन समान माना जाता है। हालांकि एक्सटेंशन का प्रदर्शन PHP वेब अनुरोध के कुल रन टाइम का केवल एक अंश योगदान देता है। अक्सर, प्रभाव 0.1% के रूप में कम है।

-2

MySQLiMySQL से अधिक दो बुनियादी फायदे हैं; एसक्यूएल इंजेक्शन हमलों से बचने के लिए तैयार बयान एक शानदार तरीका है। दूसरा MySQL (या mariaDB) तैयार कथन अनुकूलित करने के लिए अपनी पूरी कोशिश करेगा और इस प्रकार आपके पास स्पीड ऑप्टिमाइज़ेशन की संभावना है। डेटाबेस को खुश करने से गति बढ़ जाती है, MySQL और MySQLi के बीच छोटे अंतर को बड़े पैमाने पर आउटसोर्स कर देगा।

यदि आप कथन में भोजन कर रहे हैं तो आप SELECT * FROM users WHERE ID=$user_id जैसे खुद को एक साथ जोड़ते हैं, डेटाबेस $user_id के प्रत्येक नए मान के साथ एक अद्वितीय बयान के रूप में इसका इलाज करेगा। लेकिन एक तैयार कथन SELECT * FROM users WHERE ID=? डेटाबेस द्वारा निष्पादित कुछ अनुकूलन/कैशिंग करने का एक बेहतर मौका है।

लेकिन तुलना काफी मायने रखती है क्योंकि MySQL अब आधिकारिक तौर पर को बहिष्कृत कर दिया गया है। घोड़े के मुंह से:

पीएचपी 5.5.x में

पदावनत सुविधाओं

ext/mysql प्रतिवाद

मूल MySQL विस्तार अब पदावनत है, और जब एक डेटाबेस से कनेक्ट E_DEPRECATED त्रुटियों उत्पन्न होगा। इसके बजाय, MySQLi या PDO_MySQL एक्सटेंशन का उपयोग करें।

+0

आप इसे "से चुन सकते हैं * जहां से आईडी ($ user_id, $ user_id2)" आईडी में है और इसे –

+1

भी तेज है और कोई भी mysql से तैयार कथन भी कर सकता है। –

+0

इसमें कुछ बिंदुओं पर चयन किया गया है * उपयोगकर्ताओं से जहां आईडी = 1 चलाया गया था, आपके पास क्वेरी कैशिंग सक्षम है और यह क्वेरी संग्रहीत की गई थी, फिर इसे फिर से चलाने के बाद इसे कैश से प्राप्त किया जाएगा, भले ही यह कथन प्रत्यक्ष क्वेरी के रूप में उत्पन्न हुआ हो स्ट्रिंग या एक तैयार कथन। – Andrew

0
<?php 
$start = microtime(); 
$c = new mysqli('localhost', 'username', 'userpass', 'username_dbname'); 
$c -> select_db('username_dbname'); 


$q = $c -> query("SELECT * FROM example"); 

while ($r = $q -> fetch_array(MYSQLI_ASSOC)) 
    { 
    echo $r['col1'] . "<br/>\n"; 
    } 

$me = $c -> query("SELECT col1 FROM example WHERE id='11'") -> fetch_array(MYSQLI_ASSOC); 

echo $me['col1']; 
echo (microtime() - $start); 
?> 

क्यों जब mysqli OOP का उपयोग कर वहाँ mysql या mysqli प्रक्रियात्मक शैली के साथ इस स्क्रिप्ट का उपयोग करने से एक मामूली गति वृद्धि हुई है? उपर्युक्त स्क्रिप्ट का परीक्षण करते समय मुझे .000 9 सेकेंड दूसरे का उपयोग करते समय लगातार अधिक मिलता है 2. mysql या mysqli प्रक्रियात्मक का उपयोग करते समय, मैंने प्रत्येक अलग शैली में स्क्रिप्ट 20x लोड की और दोनों हमेशा ऊपर थे .001। मैं उपरोक्त स्क्रिप्ट 20x लोड करता हूं और मैं नीचे आता हूं .001 5x।

+0

आम तौर पर परीक्षण करते समय मैं यह सुनिश्चित करने में सहायता के लिए SQL_NO_CACHE का उपयोग करने का सुझाव दूंगा कि प्रश्न चल रहे हैं। इसके अतिरिक्त आपके पास परीक्षण बहुत मजबूत नहीं है और थोड़ा यादृच्छिक रैम/हार्डडिस्क एक्सेस प्रदर्शन आसानी से परिणाम निकाल सकता है। वास्तव में एक ही परिस्थिति में परीक्षणों की एक बैटरी को यह सुनिश्चित करना आवश्यक है कि एक या दूसरे में प्रदर्शन सुधार हो। – Andrew

संबंधित मुद्दे