ऑप्टिमाइज़र पूर्ण तालिका स्कैन की सापेक्ष लागत और इंडेक्स का उपयोग करके अपना निर्णय लेगा। यह मुख्य रूप से नीचे आता है कि क्वेरी को संतुष्ट करने के लिए कितने ब्लॉक पढ़ना होगा। किसी अन्य उत्तर में उल्लिखित अंगूठे का 25%/75% नियम सरल है: कुछ मामलों में एक पूर्ण तालिका स्कैन भी पंक्तियों का 1% प्राप्त करने के लिए समझ में आ जाएगा - यानी यदि उन पंक्तियों को कई ब्लॉक के आसपास फैलाना होता है। आप देख सकते हैं, टी 1 में पंक्तियों की केवल लगभग 1% एक गैर-शून्य object_id है
SQL> create table t1 as select object_id, object_name from all_objects;
Table created.
SQL> alter table t1 modify object_id null;
Table altered.
SQL> update t1 set object_id = null
2 where mod(object_id,100) != 0
3/
84558 rows updated.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select count(*) from t1 where object_id is not null;
COUNT(*)
----------
861
:
उदाहरण के लिए, इस तालिका पर विचार करें।लेकिन जिस तरह से मैंने टेबल बनाया है, इन 861 पंक्तियों को मेज के चारों ओर समान रूप से समान रूप से फैलाया जाएगा। इसलिए, क्वेरी:
select * from t1 where object_id is not null;
अनुकूलक सूचकांक का इस्तेमाल किया है, भले ही, टी 1 में लगभग हर ब्लॉक का दौरा करने के डेटा प्राप्त करने की संभावना है। यह सूचकांक के साथ बांटने और पूर्ण टेबल स्कैन के लिए जाने के लिए समझ में आता है!
एक प्रमुख आंकड़ा मदद करने के लिए इस स्थिति की पहचान सूचकांक क्लस्टरिंग कारक है:
SQL> select clustering_factor from user_indexes where index_name='T1_IDX';
CLUSTERING_FACTOR
-----------------
460
यह मान 460 बहुत अधिक है (सूचकांक में 861 पंक्तियों की तुलना में), और पता चलता है कि एक पूर्ण तालिका स्कैन करेगा इस्तेमाल किया गया। this DBAZine article on clustering factors देखें।
स्रोत
2009-04-06 16:46:53
क्वास्नोई, आपको वह 75% कहां मिल रहा है? यदि कोई लाख पंक्तियां हैं और केवल एक शून्य है, तो उस कॉलम पर एक इंडेक्स का उपयोग टेबल स्कैन से धीमा क्यों होगा? – tpdi
क्योंकि सूचकांक ROWID पर एक छिपी हुई भागीदारी को लागू करता है, जिसकी तालिका स्कैन के रूप में लगभग 4 गुना अधिक खर्च होता है। क्या सूचकांक चयन 25% से कम है, तालिका स्कैन आमतौर पर तेज़ होता है। – Quassnoi
एक पूर्ण तालिका स्कैन में, आप बस तालिका में सभी पंक्तियों पर फिर से शुरू होते हैं; यदि आप इंडेक्स स्कैन करते हैं, तो आपको पहले इंडेक्स को पढ़ना होगा, और उसके बाद टेबल को पढ़ना होगा। एक निश्चित बिंदु से एक सूचकांक पढ़ने की लागत पूरी तालिका को पढ़ने से कहीं अधिक है। – andri