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

PHP/MySQL डेटाबेस क्वेरी वास्तव में कैसे काम करती हैं?

विवरण कार्यान्वयन पर निर्भर हैं लेकिन आम तौर पर बोलते हुए, परिणाम बफ़र किए जाते हैं। किसी डेटाबेस के विरुद्ध कोई क्वेरी निष्पादित करने से कुछ परिणाम सेट वापस आ जाएगा। यदि यह पर्याप्त रूप से छोटा है तो सभी परिणाम प्रारंभिक कॉल के साथ लौटाए जा सकते हैं या कुछ हो सकते हैं और परिणाम ऑब्जेक्ट पर पुनरावृति के रूप में अधिक परिणाम वापस आ जाते हैं।

अनुक्रम के बारे में इस प्रकार सोचें:

  1. आप डेटाबेस से कनेक्शन खोलते हैं;
  2. डेटाबेस का चयन करने के लिए संभवत:दूसरी कॉल है या इसे (1) के भाग के रूप में किया जा सकता है;
  3. वह प्रमाणीकरण और कनेक्शन चरण (कम से कम) सर्वर के लिए एक राउंड ट्रिप है (लगातार कनेक्शन को अनदेखा करना);
  4. आप क्लाइंट पर एक क्वेरी निष्पादित करते हैं;
  5. वह क्वेरी सर्वर को भेजी जाती है;
  6. सर्वर को यह निर्धारित करना होता है कि क्वेरी को कैसे निष्पादित किया जाए;
  7. यदि सर्वर ने पहले क्वेरी निष्पादित की है तो निष्पादन योजना अभी भी क्वेरी कैश में हो सकती है। यदि नहीं तो कोई नई योजना बनाई जानी चाहिए;
  8. सर्वर दिए गए अनुसार क्वेरी को निष्पादित करता है और क्लाइंट को परिणाम देता है;
  9. उस परिणाम में पंक्तियों का कुछ बफर होगा जो कार्यान्वयन पर निर्भर है। यह 100 पंक्तियाँ या अधिक या कम हो सकती है। प्रत्येक पंक्ति के लिए सभी कॉलम लौटाए जाते हैं;
  10. जैसे ही आप अधिक पंक्तियाँ लाते हैं, अंततः ग्राहक सर्वर से अधिक पंक्तियों के लिए कहेगा। यह तब हो सकता है जब क्लाइंट समाप्त हो जाता है या इसे प्रीमेप्टिव रूप से किया जा सकता है। फिर से यह कार्यान्वयन पर निर्भर है।

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

LIMIT क्लॉज--या वास्तव में कोई क्लॉज--परिणाम सेट को संशोधित करेगा।

अंत में, (7) महत्वपूर्ण है क्योंकि SELECT * FROM table WHERE a = 'foo' और SELECT * FROM table WHERE a = 'bar' जहाँ तक डेटाबेस ऑप्टिमाइज़र का संबंध है, दो अलग-अलग प्रश्न हैं, इसलिए प्रत्येक के लिए एक निष्पादन योजना अलग से निर्धारित की जानी चाहिए। लेकिन एक पैरामीटरयुक्त क्वेरी (SELECT * FROM table WHERE a = :param ) विभिन्न मापदंडों के साथ एक क्वेरी है और केवल एक बार योजना बनाई जानी चाहिए (कम से कम जब तक यह क्वेरी कैश से बाहर नहीं हो जाती)।



  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 डेटा का स्वचालित या नियमित बैकअप

  3. संपूर्ण MySQL डेटाबेस को कैसे हटाएं

  4. MYSQL - ऑर्डर टाइमस्टैम्प मान नवीनतम से सबसे पुराने क्रम में आरोही क्रम में हैं?

  5. रूबी डेटाटाइम MySQL तुलना के लिए उपयुक्त है