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

PostgreSQL एक फ़ंक्शन में मेरी क्वेरी को अलग तरीके से क्यों मानता है?

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;

टिप्पणी के बाद संपादित करें:

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

मैं मैनुअल से एक उद्धरण जोड़ता हूं मेरे उपरोक्त कथनों का बैकअप लेने के लिए:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टॉमकैट 7 जेडीबीसी कनेक्शन पूल - प्रत्येक डेटाबेस के लिए अलग पूल?

  2. Postgresql में tcp_keepalives सेटिंग्स का उपयोग कैसे करें?

  3. एकल SQL कथन का उपयोग करके एकाधिक अधिकतम () मानों का चयन करना

  4. अनुक्रमिक अनुक्रमणिका के लिए भरण कारक जो PK है

  5. क्या आप 8.3 के बाद से PostgreSQL TEMP TABLE के प्रदर्शन में गिरावट देख रहे हैं?