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

PDO विवरण MySQL CLI से 400 गुना अधिक समय लेता है

मुझे संदेह है कि सुस्ती पंक्तियों को लाने में है, पंक्तियों की संख्या को वापस किया जा रहा है, बजाय बयान में 5000+ बाइंड प्लेसहोल्डर्स के। pId IN ( ? , ? , ... , ? )

मेरा सुझाव होगा कि केवल एक पंक्ति लौटाने का परीक्षण किया जाए, एक मान की आपूर्ति की जाए जो मौजूद है/एक पंक्ति लौटाता है, और फिर 4999+ मान जो मौजूद नहीं हैं/पंक्ति को वापस नहीं करने के लिए जाने जाते हैं।

उदाहरण के लिए, यदि हम तालिका में उच्चतम pId मान जानते हैं, तो उससे अधिक मान का उपयोग करें, इस तरह के कथन के लिए बाइंड मानों की आपूर्ति करें

 ... pId IN ( ? , ? , ? , ... , ? )

तो परिणाम चलने के बराबर होगा

 ... pId IN ( 99999999 , 99999998 , 99999997 , ... , 42 )

जो वही परिणाम होगा जो हम चलेंगे

 ... pId IN ( 42 )

हमारी अपेक्षा केवल एक पंक्ति ( pId =42 ) लौटाने की होगी।

फिर उस समय की तुलना करें (5000+ बाइंड मान 1 पंक्ति लौटाते हैं) दो बाइंड मानों को एक पंक्ति लौटाते हैं

 ... pId IN ( 99999999 , 42 )

और देखें कि क्या प्रदर्शन में कोई महत्वपूर्ण अंतर है।

(5000+ बाइंड वैल्यू के साथ और काम करना है, लेकिन मैं विशाल की उम्मीद नहीं करूंगा अंतर है, लेकिन इसका परीक्षण किया जाना चाहिए।

इस पर थोड़ा विचार करते हुए, सभी मौजूदा बाइंड मानों का उपयोग करके और केवल LIMIT 2 जोड़कर परीक्षण सेट करना आसान हो सकता है क्वेरी के अंत तक। (मुझे यकीन नहीं है कि MySQL में LIMIT 2 . के लिए कुछ प्रदर्शन संवर्द्धन हैं या नहीं ।

AND pId * 10 = 420 . जैसी शर्त जोड़ना शायद बेहतर होगा

लक्ष्य बाइंड वैल्यू की एक पूरी श्रृंखला की आपूर्ति करना है, लेकिन केवल एक या दो पंक्तियों को वापस करना है।

एक और परीक्षण पंक्तियों की एक पूरी श्रृंखला वापस करना होगा, लेकिन केवल कुछ बाध्य मूल्यों का उपयोग करना। शायद एक सीमा शर्त जो 5000+ पंक्तियां लौटाती है।

क्वेरी हो सकती है:

 ... pId >= ? AND pId <= ? 

प्रदान किए गए मानों के बीच एक बड़ी पर्याप्त सीमा के साथ जो हमें 5000 पंक्तियों के पड़ोस में मिलता है।

और प्रदर्शन की तुलना करें।

मेरी भविष्यवाणी (अनुमान है?) यह है कि प्रदर्शन को बाइंड मानों की संख्या के बजाय लौटाई गई पंक्तियों की संख्या के साथ अधिक सहसंबद्ध किया जाएगा।

मुझे यकीन नहीं है कि यह आपके प्रश्न का उत्तर है, लेकिन यह वह दृष्टिकोण है जिसे मैं इस प्रश्न का उत्तर देने के लिए अपनाऊंगा ... "यह धीमा होने का कारण क्या है, बाइंड मानों की संख्या, या पंक्तियों की संख्या वापस आ गई है? "




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल केवल कुछ पंक्तियों को लाने के लिए?

  2. mysql में उच्चारण संवेदनशील और केस असंवेदनशील utf8 संयोजन होना संभव है?

  3. PHP फ़ंक्शन MySQL regexp सिंटैक्स से बचने के लिए

  4. PHP foreach उपयोगकर्ता स्क्रिप्ट अपाचे को लटकाने लगती है

  5. PHP में GET अनुरोध के माध्यम से इनपुट का नाम कैसे पास करें?