उत्तर पोस्टग्रेज़ संस्करण, एन्कोडिंग और लोकेल जैसे कई कारकों पर निर्भर करता है - LC_COLLATE
विशेष रूप से।
बेयर एक्सप्रेशन lower(description) LIKE '%abc%'
आमतौर पर description ILIKE '%abc%'
. से थोड़ा तेज होता है , और या तो समकक्ष रेगुलर एक्सप्रेशन से थोड़ा तेज़ है:description ~* 'abc'
. अनुक्रमिक स्कैन के लिए यह महत्वपूर्ण है जहां प्रत्येक परीक्षण पंक्ति के लिए अभिव्यक्ति का मूल्यांकन किया जाना है।
लेकिन आपके जैसे बड़े टेबल के लिए आपके उत्तर में निश्चित रूप से एक इंडेक्स का उपयोग किया जाएगा। मनमानी पैटर्न के लिए (न केवल बाएं-एंकर) मैं अतिरिक्त मॉड्यूल pg_trgm
का उपयोग करके एक ट्रिग्राम इंडेक्स का सुझाव देता हूं . फिर हम सेकंड के बजाय मिलीसेकंड के बारे में बात करते हैं और उपरोक्त भावों के बीच का अंतर शून्य हो जाता है।
GIN और GiST इंडेक्स (gin_trgm_ops
. का इस्तेमाल करके) या gist_trgm_ops
ऑपरेटर वर्ग) समर्थन LIKE
(~~
), ILIKE
(~~*
), ~
, ~*
(और कुछ और प्रकार) एक जैसे। description
. पर ट्राइग्राम GIN इंडेक्स के साथ (आमतौर पर जीआईएसटी से बड़ा, लेकिन पढ़ने के लिए तेज़), आपकी क्वेरी description ILIKE 'case_insensitive_pattern'
का उपयोग करेगी ।
संबंधित:
- PostgreSQL क्वेरी प्रदर्शन विविधताओं की तरह
- स्वतः पूर्ण फ़ील्ड के लिए समान UTF-8 स्ट्रिंग्स
Postgres में पैटर्न मिलान के लिए मूल बातें:
- PostgreSQL में LIKE, SIMILAR TO या रेगुलर एक्सप्रेशन से मिलान करने वाला पैटर्न
उक्त ट्रिग्राम इंडेक्स के साथ काम करते समय यह आमतौर पर . होता है साथ काम करने के लिए अधिक व्यावहारिक:
description ILIKE '%abc%'
या केस-असंवेदनशील रेगेक्सपी ऑपरेटर के साथ (बिना %
वाइल्डकार्ड):
description ~* 'abc'
(description)
. पर एक इंडेक्स lower(description)
. पर प्रश्नों का समर्थन नहीं करता है जैसे:
lower(description) LIKE '%abc%'
और इसके विपरीत।
lower(description)
. पर विधेय के साथ विशेष रूप से , एक्सप्रेशन इंडेक्स थोड़ा बेहतर विकल्प है।
अन्य सभी मामलों में, (description)
. पर एक अनुक्रमणिका बेहतर है क्योंकि यह दोनों का समर्थन करता है केस-संवेदी और असंवेदनशील विधेय।