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

तैयार स्टेटमेंट में खाली LIKE का प्रदर्शन प्रभाव

पोस्टग्रेज 9.2 या बाद के संस्करण आम तौर पर यह समझने के लिए पर्याप्त स्मार्ट है कि स्थिति

WHERE name LIKE '%%'

चयनात्मक नहीं है और जीआईएसटी सूचकांक की अनदेखी करते हुए अनुक्रमिक स्कैन का सहारा लेता है - यहां तक ​​कि तैयार बयानों के साथ भी। आप करते हैं हालांकि, बेकार की स्थिति के लिए एक छोटी सी कीमत चुकाएं।

Postgres 9.1 या इससे पहले के संस्करण में मैं विशेष मामले के लिए एक अलग क्वेरी बनाऊंगा।

नोट्स की तुलना करें PREPARE . के लिए अनुभाग संस्करणों के लिए मैनुअल में विवरण 9.1 , 9.2 और 9.3

स्वयं सत्यापित करें

स्टेटमेंट तैयार करें और EXPLAIN ANALYZE run चलाएं परीक्षण करने के लिए:

PREPARE plan1 (text) AS
SELECT  * FROM file
WHERE   name LIKE $1;

EXPLAIN ANALYZE EXECUTE plan1('%123%');

EXPLAIN ANALYZE EXECUTE plan1('%%');

योजनाएं आमतौर पर सत्र की अवधि के लिए कैश की जाती हैं।

वैकल्पिक क्वेरी

आपके द्वारा चलाए जा रहे संस्करण के बावजूद, यदि आप हमेशा एक पूर्ण पाठ खोज (बाएं और दाएं वाइल्डकार्ड) करते हैं, तो यह क्वेरी तैयार कथन के लिए तेज़ होनी चाहिए:

SELECT * FROM files WHERE name LIKE ('%' || $1 || '%');

और बिना जोड़े वाइल्डकार्ड के पैटर्न पास करें (% ), बेशक। इस तरह, Postgres योजना बनाते समय वाइल्डकार्ड में संलग्न पैटर्न की अपेक्षा करना जानता है।

->SQLfiddle डेमो।
खाली LIKE के लिए अनुक्रमिक स्कैन और दो योजनाओं के बीच प्रदर्शन अंतर पर ध्यान दें।
SQLfiddle लोड आदि के आधार पर बहुत भिन्न होता है। एक एकल रन विश्वसनीय नहीं हो सकता है। अपने परिवेश में बेहतर परीक्षण करें और कैश को संतृप्त करने और शोर को खत्म करने के लिए प्रत्येक कथन को दो बार चलाएं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अगले रैंक (Postgresql) के LAG () / LEAD ()

  2. एक जेसन कॉलम के लिए डिफ़ॉल्ट मान सेट करना

  3. कनेक्शन.सेलेक्ट_वैल्यू केवल पीजी रत्न के साथ पोस्टग्रेज में स्ट्रिंग्स लौटाता है

  4. पोस्टग्रेज jsonb नेस्टेड ऐरे एपेंड

  5. postgresql विशिष्ट तालिका से विशिष्ट कॉलम को डीबी से दूसरे में निर्यात करने का सबसे अच्छा तरीका क्या है?