PostgreSQL 9.2 में अपडेट करें
एक बड़ा सुधार हुआ था, मैं रिलीज़ नोट उद्धृत करता हूं यहाँ :
PostgreSQL 9.1 या पुराने के लिए मूल उत्तर
एक plpgsql फ़ंक्शन का PREPARE
. के समान प्रभाव होता है कथन:प्रश्नों को पार्स किया जाता है और क्वेरी योजना को कैश किया जाता है।
लाभ यह है कि प्रत्येक कॉल के लिए कुछ ओवरहेड सहेजा जाता है।
नुकसान यह है कि क्वेरी योजना उस विशेष पैरामीटर मानों के लिए अनुकूलित नहीं है जिसे इसे कहा जाता है।
डेटा वितरण के साथ तालिकाओं पर प्रश्नों के लिए, यह आम तौर पर कोई समस्या नहीं होगी और पीएल/पीजीएसक्यूएल फ़ंक्शन कच्चे एसक्यूएल प्रश्नों या एसक्यूएल कार्यों की तुलना में कुछ हद तक तेज प्रदर्शन करेंगे। लेकिन अगर आपकी क्वेरी WHERE
. में वास्तविक मानों के आधार पर कुछ इंडेक्स का उपयोग कर सकती है क्लॉज या, अधिक आम तौर पर, विशेष मूल्यों के लिए एक बेहतर क्वेरी प्लान चुना है, तो आप एक उप-इष्टतम क्वेरी योजना के साथ समाप्त हो सकते हैं। SQL फ़ंक्शन आज़माएं या डायनेमिक SQL का उपयोग करें EXECUTE
प्रत्येक कॉल के लिए क्वेरी को फिर से नियोजित करने के लिए बाध्य करने के लिए। इस तरह दिख सकता है:
CREATE OR REPLACE FUNCTION pie(id_param integer)
RETURNS SETOF record AS
$BODY$
BEGIN
RETURN QUERY EXECUTE
'SELECT *
FROM table_name
where id = $1'
USING id_param;
END
$BODY$
LANGUAGE plpgsql STABLE;
टिप्पणी के बाद संपादित करें:
यदि यह संस्करण निष्पादन समय नहीं बदलता है, तो खेल में अन्य कारक भी होने चाहिए जिन्हें आपने याद किया होगा या उल्लेख नहीं किया होगा। अलग डेटाबेस? विभिन्न पैरामीटर मान? आपको अधिक विवरण पोस्ट करना होगा।
मैं मैनुअल से एक उद्धरण जोड़ता हूं मेरे उपरोक्त कथनों का बैकअप लेने के लिए: