2012-09-04 9 views
5

मैं विभिन्न प्रश्नों का परीक्षण कर रहा हूं और मैं उत्सुक हूं कि बिटमैप हीप स्कैन और इंडेक्स स्कैन का उपयोग कैसे करें।बिटमैप हीप स्कैन और इंडेक्स स्कैन का निर्णय कैसे लिया जाता है?

ग्राहकों पर इंडेक्स customers_email_idx बनाएं (ईमेल varchar_pattern_ops);

जैसा कि आप देख सकते हैं कि एक ग्राहक तालिका (डेलस्टोर उदाहरण) है और मैं ईमेल कॉलम में एक इंडेक्स जोड़ता हूं।

पहले क्वेरी यहां है:

चयन * ग्राहकों से जहां की तरह ईमेल 'ITQ%@dell.com'; -> सूचकांक स्कैन के साथ क्वेरी

के बारे में बताएं क्वेरी का विश्लेषण यहाँ है:

              QUERY PLAN                
--------------------------------------------------------------------------------------------------------------------------------- 
Index Scan using customers_email_idx on customers (cost=0.00..8.27 rows=2 width=268) (actual time=0.046..0.046 rows=0 loops=1) 
    Index Cond: (((email)::text ~>=~ 'ITQ'::text) AND ((email)::text ~<~ 'ITR'::text)) 
    Filter: ((email)::text ~~ 'ITQ%@dell.com 
'::text) 
Total runtime: 0.113 ms 

अन्य क्वेरी यहां है:

चयन * ग्राहकों से जहां तरह के ईमेल आईटी% @ dell.com '; -> बिटमैप ढेर स्कैन

साथ क्वेरी के बारे में बताएं क्वेरी का विश्लेषण यहाँ है:

              QUERY PLAN               
------------------------------------------------------------------------------------------------------------------------------ 
Bitmap Heap Scan on customers (cost=4.54..106.77 rows=2 width=268) (actual time=0.206..0.206 rows=0 loops=1) 
    Filter: ((email)::text ~~ 'IT%@dell.com 
'::text) 
    -> Bitmap Index Scan on customers_email_idx (cost=0.00..4.54 rows=29 width=0) (actual time=0.084..0.084 rows=28 loops=1) 
     Index Cond: (((email)::text ~>=~ 'IT'::text) AND ((email)::text ~<~ 'IU'::text)) 
Total runtime: 0.273 ms 

आप इस उदाहरण क्यों बिटमैप और सूचकांक स्कैन यहाँ प्रयोग किया जाता है व्याख्या कर सकते हैं?

.. धन्यवाद

+1

@ अराक्निड के उत्तर और यह देखें: http : //wiki.postgresql.org/images/4/45/Explaining_EXPLAIN.pdf 'इंडेक्स स्कैन' की तलाश करें। कुंजी 'ऑप्टिमाइज़र कम चयनकता' – dezso

+1

के साथ किसी भी अनुक्रमणीय स्कैन के लिए इसे [बिटमैप स्कैन] चुन सकता है, मुझे लगता है कि यह प्रश्न dba.SE. पर अच्छी तरह से फिट होगा। –

उत्तर

6

कितने पंक्तियों आप तालिका में कुल में क्या है? निर्णय सूचकांक स्कैन द्वारा पंक्तियों का अनुपात किस प्रकार उत्पादन किया जाएगा इस पर आधारित है।

यदि तालिका का पर्याप्त उच्च अनुपात एक्सेस किया जा रहा है, तो बिटमैप इंडेक्स स्कैन का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि जितना संभव हो उतना डिस्क एक्सेस अनुक्रमिक है। इसके विपरीत, एक सादा इंडेक्स स्कैन तालिका डेटा पर एक-पेज-पर-एक-बार यादृच्छिक पहुंच करता है। (और यदि तालिका का अनुपात उपयोग किया जाने वाला अनुमान पर्याप्त है, तो सूचकांक का उपयोग बिल्कुल नहीं किया जाता है, और संपूर्ण तालिका डेटा क्रमशः लोड किया जाता है)

एक मुद्दा यह है कि तालिका से कितनी पंक्तियां प्रक्षेपण पहुंचने जा रहे हैं सिर्फ एक अनुमान है। लेकिन जैसा कि आप कल्पना कर सकते हैं, 'आईटी%' 'आईटीक्यू%' से अधिक मिलान करने की संभावना है (याद रखें कि प्रत्यय इंडेक्स स्कैन का हिस्सा नहीं है, केवल अंतिम फ़िल्टर)

+0

कुल पंक्तियां: 20.000 - सूचकांक स्कैन द्वारा प्राप्त पंक्तियां: 5 - बिटमैप द्वारा पाई गई पंक्तियां: 6 – TraviJuu

संबंधित मुद्दे