2010-03-12 11 views
5

हाल ही में मैं एक ब्लॉग के माध्यम से जा रहा था और mysql में पीडीओ का उपयोग करने के बारे में कुछ बिंदुओं को देखा और यह पीडीओ के बारे में मेरा विचार बदल गया। बिंदु हैं:पीएसओ mysql प्रदर्शन में

  1. मूल निवासी तैयार बयान क्वेरी कैश का लाभ नहीं ले जा सकते हैं, कम प्रदर्शन में जिसके परिणामस्वरूप।

  2. मूल निवासी तैयार बयान "दिखाएं तालिकाएं"

  3. मूल निवासी तैयार बयान को सही ढंग से, कुछ अन्य "दिखाएं" प्रश्नों के लिए स्तंभ लंबाई संवाद नहीं है विकृत परिणामों में जिसके परिणामस्वरूप की तरह प्रश्नों के certains प्रकारों को निष्पादित नहीं कर सकते हैं।

  4. देशी तैयार बयानों का उपयोग करके संग्रहित प्रक्रियाओं को कई बार कॉल करना कनेक्शन को छोड़ने का कारण बनता है।

क्या कोई इस पर टिप्पणी कर सकता है?

मैं अपने वेब ऐप में क्वेरी कैश चाहता था। मैं अपनी वेबसाइट के साथ प्रदर्शन मुद्दों पर विचार करने के बाद पीडीओ का उपयोग करने के लिए अपने वेब ऐप को स्थानांतरित करने की तैयारी कर रहा हूं। क्या कोई मुझे सुझाव दे सकता है?

अग्रिम धन्यवाद।

+1

आपको उस ब्लॉग का लिंक जोड़ना चाहिए था जो मुझे विश्वास है [यह] (http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/)। लेखक ने स्पष्ट किया है कि "जब मैंने 2006 में इसे वापस लिखा था, हाँ, यह सच था" और "मुझे नहीं पता कि यह बाद में हल हो गया है या नहीं - मुझे कई सालों बाद उम्मीद है।" जब किसी ने बताया कि पहला बिंदु गलत है। तो नीचे स्वीकार किया गया उत्तर अब लागू नहीं हो सकता है। –

उत्तर

5

खैर

  • आप पहला बिंदु
  • दिखाने के लिए और शो तालिकाएं आदेशों आमतौर पर संग्रहित प्रक्रियाओं के साथ संयोजन में तैयार statemends का उपयोग कर
  • Iam सबसे उपयोग के मामलों में इस्तेमाल नहीं कर रहे हैं और नहीं है के लिए सही हैं अभी तक ऐसी समस्याओं का अनुभव किया।

आप क्वेरी कैशिंग को सक्षम करने के लिए निम्न आदेश का उपयोग कर सकते हैं:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 

यह आदेश केवल पर पीएचपी 5.1.3 से उपलब्ध है।

2

तैयार बयान क्वेरी कैश का उपयोग करते हैं, लेकिन यह स्थिति है:

5,1 डॉक्टर से:

Befor ई MySQL 5.1.17, तैयार कथन क्वेरी कैश का उपयोग नहीं करते हैं।

  • बयान कि() mysql_stmt_prepare() और mysql_stmt_execute का उपयोग कर बाइनरी प्रोटोकॉल का उपयोग जारी किए जाते हैं: 5.1.17 के साथ शुरुआत करने के लिए तैयार बयान कुछ शर्तों, जो तैयारी विधि के आधार पर भिन्न तहत क्वेरी कैश का उपयोग करें।
  • विवरण जो कि पाठ (nonbinary) प्रोटोकॉल का उपयोग कर जारी किए गए हैं और EXECUTE का उपयोग कर जारी किए गए हैं। खंड 12.6, "तैयार वक्तव्य के लिए एसक्यूएल सिंटेक्स" देखें।

कौन सा 5.5 डॉक्टर के रूप में restates:

तैयार बयान है कि mysql_stmt_prepare() और mysql_stmt_execute() का उपयोग कर बाइनरी प्रोटोकॉल का उपयोग जारी किए जाते हैं, कैशिंग पर सीमाओं के अधीन हैं। क्वेरी कैश में बयानों के साथ तुलना विस्तार के बाद बयान के पाठ पर आधारित है? पैरामीटर मार्कर कथन की तुलना केवल अन्य कैश किए गए बयानों के साथ की जाती है जिन्हें बाइनरी प्रोटोकॉल का उपयोग करके निष्पादित किया गया था। यही है, क्वेरी कैश उद्देश्यों के लिए, बाइनरी प्रोटोकॉल का उपयोग करके जारी किए गए तैयार बयान पाठ प्रोटोकॉल का उपयोग करके जारी किए गए तैयार बयान से अलग हैं।

+0

"MySQL 5.1.17 से पहले, तैयार कथन क्वेरी कैश का उपयोग नहीं करते हैं। 5.1.17 के साथ शुरुआत, तैयार कथन कुछ स्थितियों के तहत क्वेरी कैश का उपयोग करते हैं, जो तैयारी विधि के आधार पर भिन्न होते हैं: ... विवरण जो कि जारी किए जाते हैं mysql_stmt_prepare() और mysql_stmt_execute() " – thomasrutter

+0

@thomasrutter का उपयोग करके बाइनरी प्रोटोकॉल - दस्तावेज़ से उद्धृत करने के बजाय दस्तावेज़ को उद्धृत करने का अच्छा विचार। मैंने अधिक उपयोगी होने के लिए प्रलेखन जोड़ा है – SeanDowney

+0

उस पाठ के नीचे कुछ योग्यताएं भी हैं - उदाहरण के लिए, कैशिंग को "?" के विस्तार के बाद किया जाता है पैरामीटर, और यह निर्धारित करने के लिए कुछ चीजें हैं कि आप तैयार करें और निष्पादित करें या आप एपीआई फ़ंक्शन तैयार() इत्यादि का उपयोग करते हैं या नहीं। – thomasrutter

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