प्रत्येक क्वेरी के लिए पृष्ठों का बिटमैप गतिशील रूप से बनाया गया है। यह कैश या फिर से उपयोग नहीं किया जाता है, और बिटमैप इंडेक्स स्कैन के अंत में त्याग दिया जाता है।
पेज बिटमैप को अग्रिम में बनाने का अर्थ नहीं है क्योंकि इसकी सामग्री भविष्यवाणी पर निर्भर करती है।
कहें कि आप x=1 and y=2
खोज रहे हैं। आपके पास x
और y
पर बी-पेड़ इंडेक्स हैं। PostgreSQL x
और y
को बिटमैप में गठबंधन नहीं करता है, फिर बिटमैप को खोजें। यह x=1
वाले सभी पृष्ठों के पृष्ठ पते के लिए सूचकांक x
स्कैन करता है और एक बिटमैप बनाता है जहां x=1
वाले पृष्ठ सत्य हैं। फिर यह y
स्कैन करता है जो पेज पतों की तलाश में है जहां y
2
के बराबर हो सकता है, जिससे उसमें बिटमैप बन सकता है। फिर यह उन पृष्ठों को ढूंढने के लिए कहता है जहां x=1
और y=2
दोनों सत्य हो सकते हैं। आखिरकार, यह तालिका को स्वयं स्कैन करता है, केवल उन पृष्ठों को पढ़ता है जिनमें उम्मीदवार मूल्य हो सकते हैं, प्रत्येक पृष्ठ को पढ़ सकते हैं और केवल पंक्तियों को रखते हुए x=1 and y=2
।
अब, यदि आप कैश किए गए, पूर्व-निर्मित बिटमैप इंडेक्स की तरह कुछ ढूंढ रहे हैं, तो PostgreSQL 9.5: BRIN indexes में ऐसी कोई चीज़ है। ये बहुत बड़ी टेबल के लिए हैं, और तालिका के उन श्रेणियों को ढूंढने का एक तरीका प्रदान करते हैं जिन्हें छोड़ दिया जा सकता है क्योंकि वे ज्ञात मूल्य नहीं रखते हैं।
स्रोत
2015-10-13 12:35:04
तो, हम किसी भी समय 'बिटमैप हीप स्कैन' करने की आवश्यकता होने पर स्ट्रैच_ से संरचना का निर्माण करते हैं? –
नहीं, यह उपयोगकर्ता के लिए पारदर्शी है। –