MySQL (अधिकांश DBMS की तरह) तैयार किए गए कथनों के लिए निष्पादन योजनाओं को कैश करेगा, इसलिए यदि उपयोगकर्ता A इसके लिए कोई योजना बनाता है:
SELECT * FROM some_table WHERE a_col=:v1 AND b_col=:v2
(जहां v1 और v2 बाइंड वर्र्स हैं) फिर डीबीएमएस द्वारा इंटरपोल किए जाने के लिए मान भेजता है, फिर उपयोगकर्ता बी एक ही क्वेरी भेजता है (लेकिन इंटरपोलेशन के लिए अलग-अलग मानों के साथ) डीबीएमएस को योजना को पुन:उत्पन्न करने की आवश्यकता नहीं होती है। यानी यह डीबीएमएस है जो मिलान योजना ढूंढता है - पीडीओ नहीं।
हालांकि इसका मतलब यह है कि डेटाबेस पर प्रत्येक ऑपरेशन के लिए कम से कम 2 राउंड ट्रिप की आवश्यकता होती है (क्वेरी प्रस्तुत करने के लिए पहला, बाइंड वर्र्स प्रस्तुत करने के लिए दूसरा) शाब्दिक मूल्यों के साथ एक क्वेरी के लिए सिंगल राउंड ट्रिप के विपरीत, फिर यह अतिरिक्त नेटवर्क लागत पेश करता है . क्वेरी/प्लान कैश को डीरेफ्रेंसिंग (और बनाए रखने) में एक छोटी सी लागत भी शामिल है।
मुख्य प्रश्न यह है कि क्या यह लागत पहली बार में योजना तैयार करने की लागत से अधिक है।
जबकि (मेरे अनुभव में) ओरेकल के साथ तैयार बयानों का उपयोग करके निश्चित रूप से एक प्रदर्शन लाभ प्रतीत होता है, मुझे विश्वास नहीं है कि यह MySQL के लिए भी सच है - हालांकि, आपके डेटाबेस की संरचना और जटिलता पर बहुत कुछ निर्भर करेगा क्वेरी (या अधिक विशेष रूप से, ऑप्टिमाइज़र क्वेरी को हल करने के लिए कितने अलग-अलग विकल्प ढूंढ सकता है)।
इसे स्वयं मापने का प्रयास करें (संकेत:आप धीमी क्वेरी थ्रेशोल्ड को 0 पर सेट करना चाहते हैं और लॉग में लिखे गए प्रश्नों के लिए शाब्दिक मानों को वापस अनाम अभ्यावेदन में बदलने के लिए कुछ कोड लिखना चाहते हैं)।