MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

वाइल्डकार्ड टेक्स्ट लुकअप को तेज करना

PostgreSQL क्वेरी प्लानर स्मार्ट है, लेकिन AI नहीं है। इसे बनाने के लिए एक व्यंजक पर अनुक्रमणिका . का उपयोग करें अभिव्यक्ति के ठीक उसी रूप का उपयोग करें क्वेरी में।

इस तरह की अनुक्रमणिका के साथ:

CREATE INDEX t_a_lower_idx ON t (lower(substring(a, 1, 4)));

या PostgreSQL 9.1 में सरल:

CREATE INDEX t_a_lower_idx ON t (lower(left(a, 4)));

इस क्वेरी का प्रयोग करें:

SELECT * FROM t WHERE lower(left(a, 4)) = 'abcd';

जो 100% कार्यात्मक रूप से समतुल्य है:

SELECT * FROM t WHERE lower(a) LIKE 'abcd%'

या:

SELECT * FROM t WHERE a ILIKE 'abcd%'

लेकिन नहीं :

SELECT * FROM t WHERE a LIKE 'abcd%'

यह कार्यात्मक रूप से भिन्न क्वेरी . है और आपको एक भिन्न . की आवश्यकता है सूचकांक:

CREATE INDEX t_a_idx ON t (substring(a, 1, 4));

या PostgreSQL 9.1 के साथ आसान:

CREATE INDEX t_a_idx ON t (left(a, 4));

और इस क्वेरी का उपयोग करें:

SELECT * FROM t WHERE left(a, 4) = 'abcd';

वेरिएबल लंबाई के बाएं एंकर खोज शब्द

असंवेदनशील मामला। सूचकांक:

संपादित करें :लगभग भूल गए:यदि आप डिफ़ॉल्ट 'सी' के अलावा किसी अन्य लोकेल के साथ अपना डीबी चलाते हैं, तो आपको संचालक वर्ग को स्पष्ट रूप से निर्दिष्ट करें - text_pattern_ops मेरे उदाहरण में:

CREATE INDEX t_a_lower_idx
ON t (lower(left(a, <insert_max_length>)) text_pattern_ops);

प्रश्न:

SELECT * FROM t WHERE lower(left(a, <insert_max_length>)) ~~ 'abcdef%';

अनुक्रमणिका का उपयोग कर सकते हैं और एक निश्चित लंबाई वाले संस्करण जितना तेज़ है।

आपको इस पैटर्न मिलान के बारे में अधिक विवरण के साथ dba.SE पर पोस्ट करने में रुचि हो सकती है , विशेष रूप से ऑपरेटरों के बारे में अंतिम भाग ~>=~ और ~<~



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB क्वेरी को स्प्रिंग MongoDB सिंटैक्स में बदलें

  2. MongoDB एक कंपाउंड इंडेक्स का उपयोग क्यों नहीं कर सकता है जो क्वेरी के समान (सटीक नहीं) है?

  3. Robo 3T GUI का उपयोग करके अपने MongoDB परिनियोजन से कैसे जुड़ें?

  4. MongoDB:कुल $ प्रोजेक्ट स्थिर मान के साथ फ़ील्ड जोड़ें

  5. MongoDB क्वेरी को Java में बदलें