मैं विभिन्न प्रश्नों का परीक्षण कर रहा हूं और मैं उत्सुक हूं कि बिटमैप हीप स्कैन और इंडेक्स स्कैन का उपयोग कैसे करें।बिटमैप हीप स्कैन और इंडेक्स स्कैन का निर्णय कैसे लिया जाता है?
ग्राहकों पर इंडेक्स 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
आप इस उदाहरण क्यों बिटमैप और सूचकांक स्कैन यहाँ प्रयोग किया जाता है व्याख्या कर सकते हैं?
.. धन्यवाद
@ अराक्निड के उत्तर और यह देखें: http : //wiki.postgresql.org/images/4/45/Explaining_EXPLAIN.pdf 'इंडेक्स स्कैन' की तलाश करें। कुंजी 'ऑप्टिमाइज़र कम चयनकता' – dezso
के साथ किसी भी अनुक्रमणीय स्कैन के लिए इसे [बिटमैप स्कैन] चुन सकता है, मुझे लगता है कि यह प्रश्न dba.SE. पर अच्छी तरह से फिट होगा। –