क्या पीडीओ तैयार किए गए बयान उपयोग के बाद मुक्त हो जाना चाहिए? और यदि हां, तो कैसे? विशेष रूप से मैं MySQL के बारे में पूछ रहा हूं - आप पीडीओ के बावजूद DEALLOCATE PREPARE
पर कॉल कर सकते हैं। (संपादित करें: स्पष्टीकरण के लिए, यह प्रश्न नकली तैयारियों का जिक्र नहीं कर रहा है, लेकिन असली तैयार करता है।)पीडीओ तैयार बयानों को मुक्त करना (डीलॉकेट तैयार करें)
इसके अलावा - क्या यह परिणाम सेट (जब बड़ा) होगा?
स्पष्टीकरण:
मैं
$stmnt = $db->prepare($sql);
$stmnt->execute($aParams);
$stmnt = null;
की तर्ज जो मुझे सोच यह क्या करता है, कब, और अगर च unset($stmnt);
अलग होगा, जिसके चलते कोड को देखा है?
मैनुअल इंगित करता है कि
जब क्वेरी तैयार किया जाता है, डेटाबेस, का विश्लेषण करेगा संकलन और क्वेरी को क्रियान्वित करने के लिए अपने योजना का अनुकूलन। [...] तैयार कथन का उपयोग करके एप्लिकेशन विश्लेषण/संकलन/अनुकूलन चक्र को दोहराने से बचाता है।
जो सुझाव देता है कि आपको बयान को आवंटित करना चाहिए, और MySQL की क्षमता है। तो,
- आप
DEALLOCATE PREPARE
फोन कर सकते हैं, और कैसे - आप यह कर देना चाहिए?
- और क्या कोई यह पुष्टि कर सकता है कि सेटिंग कथन को शून्य (या कथन को अनसेट करना) के लिए mysql_ और mysqli_ के लिए "free_result" जैसा ही होगा?
- क्या यह तुरंत होता है, या क्या यह कचरा कलेक्टर को लात मारने का इंतजार करता है?
पूर्णता के लिए, एक और SO question "free_result" और mysqli_()
के लिए "बंद" कार्यों की चर्चा करते हुए पता चलता है कि बयान को मुक्त कराने वास्तव में समय कहते हैं (जब तक आप बड़े स्मृति उपयोग किया है और स्थान की आवश्यकता है)। लेकिन "free_result" SQL सर्वर को तैयार किए गए स्टेटमेंट कैश करने से मुक्त करने से अलग है।
क्या आप विशेष रूप से नकली तैयारियों को बंद कर रहे हैं? डिफ़ॉल्ट रूप से तैयार कथन ड्राइवर में नकल होते हैं, और अनुरोध के अंत में मुक्त होते हैं (जब सबकुछ जीसीडी होता है)। वैसे भी जानबूझ कर उन्हें मुक्त करने का मुद्दा क्या होगा? जहां संभव हो वहां तैयार बयानों का पुन: उपयोग करके प्रदर्शन लाभ प्रदान किया जाता है। बिंदु 3 को संबोधित करने के लिए, [free_result को एक कथन नष्ट होने पर बुलाया जाता है] (http://lxr.php.net/xref/PHP_5_4/ext/pdo_mysql/mysql_statement.c#55) (अनसेट, अनुरोध का अंत, आदि) - परीक्षण के बिना, मुझे विश्वास है कि dtors तुरंत कहा जाता है। – Leigh
हां, मैं तैयार नहीं कर रहा हूं - क्षमा करें, इस प्रश्न में स्पष्ट होना चाहिए था (लेकिन अन्यथा सवाल व्यर्थ है)। उन्हें मुक्त क्यों करें? चूंकि कई सिंगल कॉल कथन हैं जिनका उपयोग उस कनेक्शन के लिए फिर से नहीं किया जाता है - इसलिए वे भी मुक्त हो सकते हैं (ऑप्टिमाइज़ेशन कैश नहीं किए जाते हैं)। जो लोग फिर से उपयोग करते हैं, वे मुझे पकड़ते हैं (जब तक अब आवश्यकता नहीं होती है, तब वही प्रश्न लागू होता है कि उन्हें कैसे मुक्त किया जाए)। – Robbie