क्वेरी प्लान में "बिटमैप हीप स्कैन" क्या है?


113

मैं "बिटमैप हीप स्कैन" के सिद्धांत को जानना चाहता हूं, मुझे पता है कि यह अक्सर तब होता है जब मैं ORस्थिति में किसी क्वेरी को निष्पादित करता हूं ।

"बिटमैप हीप स्कैन" के पीछे सिद्धांत को कौन समझा सकता है?

जवाबों:


122

टॉम लेन से सबसे अच्छा स्पष्टीकरण आता है , जो कि एल्गोरिथ्म का लेखक है जब तक कि मैं गलत नहीं हूँ। विकिपीडिया लेख भी देखें ।

संक्षेप में, यह एक seq स्कैन की तरह एक सा है। अंतर यह है कि हर डिस्क पृष्ठ पर जाने के बजाय, एक बिटमैप इंडेक्स स्कैन एंड्स और ओआरएस लागू इंडेक्स को एक साथ करता है, और केवल उन डिस्क पृष्ठों पर जाता है जिन्हें इसकी आवश्यकता है।

यह एक इंडेक्स स्कैन से अलग होता है, जहां अनुक्रम में पंक्ति द्वारा सूचकांक का दौरा किया जाता है - जिसका अर्थ है कि एक डिस्क पृष्ठ कई बार विज़िट किया जा सकता है।


पुन: आपकी टिप्पणी में प्रश्न ... हां, यह बिल्कुल है।

एक इंडेक्स स्कैन एक-एक करके पंक्तियों के माध्यम से जाएगा, डिस्क पृष्ठों को बार-बार खोलना, जितनी बार आवश्यक हो (कुछ निश्चित रूप से स्मृति में रहेगा, लेकिन आपको बिंदु मिलता है)।

एक बिटमैप इंडेक्स स्कैन क्रमिक रूप से डिस्क पृष्ठों की एक छोटी सूची खोलेगा, और हर एक में प्रत्येक लागू पंक्ति को पकड़ लेगा (इसलिए तथाकथित रीचेक कंडस जो आप क्वेरी योजनाओं में देखते हैं)।

ध्यान दें, एक तरफ के रूप में, कैसे क्लस्टरिंग / पंक्ति क्रम किसी भी विधि के साथ संबंधित लागतों को प्रभावित करता है। यदि यादृच्छिक क्रम में सभी जगह पंक्तियाँ हैं, तो एक बिटमैप इंडेक्स सस्ता होगा। (और, वास्तव में, यदि वे वास्तव में सभी जगह हैं, तो एक seq स्कैन सबसे सस्ता होगा, क्योंकि बिटमैप इंडेक्स स्कैन कुछ ओवरहेड के बिना नहीं होता है।)


तो, "बिटमैप हीप स्कैन": एक पृष्ठ पर एक से अधिक बार नहीं जाया जा सकता है! लेकिन "इंडेक्स कैन": एक पेज को एक से अधिक बार देखा जा सकता है, क्योंकि इंडेक्स को क्रम से पंक्ति में देखा जाता है।
फ्रैंक

जब पृष्ठ कई बार देखे जाते हैं तो संभवतः कैशिंग शामिल होता है: पृष्ठ वास्तव में पहली बार (धीमी गति से) डिस्क से लोड किया जाएगा, और आगे की पहुंच कैश को मेमोरी में दबा देगी (पोस्टग्रेज कैश (तेज) या ओएस कैश (तेज)) ।
Matthieu

इसके अलावा index-only scanजब क्वेरी में केवल अनुक्रमित कॉलम एक्सेस किया जाता है। इस स्थिति में, index-only scanहीप (डेटा पेज) डेटा तक पहुंचने की आवश्यकता नहीं है: postgresql.org/docs/12/indexes-index-only-scans.html
एलन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.