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

IP श्रेणियों पर क्वेरी के लिए PostgreSQL अनुक्रमणिका का उपयोग नहीं किया गया

एक बहु-स्तंभ अनुक्रमणिका आज़माएं, लेकिन दूसरे स्तंभ पर उल्टे क्रम के साथ:

CREATE INDEX index_ips_begin_end_ip_num ON ips (begin_ip_num, end_ip_num DESC);

एकल-स्तंभ अनुक्रमणिका के लिए आदेश देना अधिकतर अप्रासंगिक है, क्योंकि इसे लगभग उतनी ही तेज़ी से पीछे की ओर स्कैन किया जा सकता है। लेकिन यह बहु-स्तंभ अनुक्रमणिका के लिए महत्वपूर्ण है।

मेरे द्वारा प्रस्तावित सूचकांक के साथ, पोस्टग्रेज पहले कॉलम को स्कैन कर सकता है और पता ढूंढ सकता है, जहां बाकी इंडेक्स पहली शर्त को पूरा करता है। फिर यह पहले कॉलम के प्रत्येक मान के लिए, दूसरी शर्त को पूरा करने वाली सभी पंक्तियों को वापस कर सकता है, जब तक कि पहला विफल न हो जाए। फिर पहले कॉलम के अगले मान पर जाएं, आदि।
यह अभी भी बहुत कुशल नहीं है और पोस्टग्रेज पहले इंडेक्स कॉलम को स्कैन करने और दूसरे के लिए फ़िल्टर करने में तेज़ हो सकता है। बहुत कुछ आपके डेटा वितरण पर निर्भर करता है।

किसी भी तरह, CLUSTER ऊपर से बहुस्तंभ अनुक्रमणिका का उपयोग कर सकते हैं प्रदर्शन में मदद करें:

CLUSTER ips USING index_ips_begin_end_ip_num

इस तरह, आपकी पहली शर्त को पूरा करने वाले उम्मीदवारों को उसी या आसन्न डेटा पृष्ठों पर पैक किया जाता है। यदि आपके पास पहले कॉलम के प्रति मान के लिए बहुत सारी पंक्तियाँ हैं, तो प्रदर्शन में बहुत मदद कर सकता है। अन्यथा यह शायद ही प्रभावी है।
(इस उद्देश्य के लिए गैर-अवरुद्ध बाहरी उपकरण भी हैं:pg_repack या pg_squeeze।)

साथ ही, ऑटोवैक्यूम चल रहा है और ठीक से कॉन्फ़िगर किया गया है या आपने ANALYZE चलाया है मेज पर? पोस्टग्रेज़ के लिए उपयुक्त क्वेरी योजनाएँ चुनने के लिए आपको वर्तमान आँकड़ों की आवश्यकता है।

यहां वास्तव में एक GiST अनुक्रमणिका . क्या मदद करेगी? एक int8range . के लिए कॉलम, PostgreSQL 9.2 के बाद से उपलब्ध है।

आगे पढ़ना:

  • कई टाइमस्टैम्प (दो कॉलम) पर क्वेरी को ऑप्टिमाइज़ करना

यदि आपकी IP श्रेणियों को किसी एक अंतर्निहित नेटवर्क प्रकार से कवर किया जा सकता है inet या cidr , अपने दो bigint . को बदलने पर विचार करें स्तंभ। या, बेहतर अभी तक, अतिरिक्त मॉड्यूल देखें ip4r एंड्रयू गीर्थ द्वारा (मानक वितरण में नहीं। अनुक्रमण रणनीति तदनुसार बदलती है।

इसे छोड़कर, आप आंशिक अनुक्रमणिका के साथ एक परिष्कृत शासन का उपयोग करके dba.SE पर यह संबंधित उत्तर देख सकते हैं। उन्नत सामग्री, लेकिन यह शानदार प्रदर्शन प्रदान करती है:

  • क्या स्थानिक अनुक्रमणिका "श्रेणी - क्रम से - सीमा" क्वेरी में मदद कर सकती है


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्ट्रिंग -> java.util.Date -> java.sql.Date (समय टिकट के साथ)

  2. विंडोज पीएसक्यूएल कमांड लाइन:क्या पासवर्ड रहित लॉगिन की अनुमति देने का कोई तरीका है?

  3. पीजी मणि स्थापित करने में विफल, mkmf.rb रूबी के लिए हेडर फाइल नहीं ढूंढ सकता (मैक ओएसएक्स 10.6.5)

  4. PostgreSQL में एक पंक्ति के बाइट आकार का पता लगाएं

  5. निर्दिष्ट निर्देशांक से 5 मील की सीमा में सभी भवन प्राप्त करना