2010-02-04 17 views
19

दो स्तंभों पर एक सूचकांक बयानओरेकल: कॉलम ऑर्डर किसी इंडेक्स में मायने रखता है?

create index foo_ix on foo(a,b); 
create index foo_ix on foo(b,a); 
  1. से किसी के साथ बनाया जा सकता है यह कैसे सूचकांक का उपयोग करने का परिचालन (क्रम) विशेषताओं प्रभावित करता है?

  2. यह सूचकांक की लेआउट (भौतिक) विशेषताओं को कैसे प्रभावित करता है?

  3. या तो (1) या (2) कॉलम के प्रकार/आकार से प्रभावित हैं?

  4. बहु-कॉलम अनुक्रमणिका बनाने के लिए सर्वोत्तम अभ्यास क्या हैं?

संक्षेप में, क्या इससे कोई फर्क पड़ता है कि मैंने पहले कौन सा कॉलम रखा था?

उत्तर

19
  1. तो a और b दोनों 1000 अलग-अलग मान है और वे हमेशा एक साथ पूछे जाते हैं तो सूचकांक में कॉलम के क्रम वास्तव में नहीं है मामला। लेकिन अगर a में केवल 10 विशिष्ट मान हैं या आपके पास प्रश्न हैं जो केवल कॉलम में से एक का उपयोग करते हैं तो इससे कोई फर्क नहीं पड़ता; इन परिदृश्यों में अनुक्रमणिका का उपयोग नहीं किया जा सकता है यदि कॉलम ऑर्डरिंग क्वेरी के अनुरूप नहीं है।
  2. कम से कम विशिष्ट मान वाले कॉलम को पहले होना चाहिए और सबसे विशिष्ट मानों वाला स्तंभ अंतिम होना चाहिए। यह न केवल सूचकांक की उपयोगिता को अधिकतम करता है बल्कि यह सूचकांक संपीड़न से संभावित लाभ भी बढ़ाता है।
  3. डेटाटाइप और कॉलम की लंबाई उस रिटर्न पर प्रभाव डालती है जिसे हम इंडेक्स संपीड़न से प्राप्त कर सकते हैं लेकिन सूचकांक में कॉलम के सर्वोत्तम क्रम पर नहीं।
  4. कॉलम को कम से कम चुनिंदा कॉलम के साथ व्यवस्थित करें और सबसे अधिक चुनिंदा कॉलम आखिरी है। कॉलम के साथ टाई लीड के मामले में जो स्वयं के इस्तेमाल होने की अधिक संभावना है।

2. और 3. के लिए एक संभावित अपवाद DATE कॉलम के साथ है। चूंकि ओरेकल DATE कॉलम में एक समय तत्व शामिल होता है, इसलिए उनके पास 86400 विशिष्ट मान प्रति दिन हो सकते हैं। हालांकि डेटा कॉलम पर अधिकतर प्रश्न आमतौर पर केवल दिन तत्व में रूचि रखते हैं, इसलिए आप अपनी गणनाओं में केवल विशिष्ट दिनों की संख्या पर विचार करना चाहेंगे। हालांकि मुझे संदेह है कि यह सापेक्ष चुनिंदाता को प्रभावित नहीं करेगा लेकिन कुछ मामलों में।

कम से कम चयनात्मक स्तंभ के साथ प्रमुख के लिए दो मुख्य कारण हैं

  1. सूचकांक संपीड़न
  2. सूचकांक छोड़ें पढ़ता
(निक Pierpoint की टिप्पणी के जवाब में) संपादित करें

ये दोनों अपने जादू को यह जानने से काम करते हैं कि वर्तमान स्लॉट में मान मूल्य के समान है पिछले स्लॉट में। नतीजतन हम मूल्य परिवर्तनों की संख्या को कम करने के द्वारा इन तकनीकों से वापसी को अधिकतम कर सकते हैं। निम्नलिखित उदाहरण में, A में चार अलग-अलग मान हैं और B में छः हैं। डिटोज एक संपीड़ित मूल्य या एक छोड़ने योग्य सूचकांक ब्लॉक का प्रतिनिधित्व करते हैं।

Least selective column leads ... 

A   B 
--------- - 
AARDVARK 1 
"   2 
"   3 
"   4 
"   5 
"   6 
DIFFVAL 1 
"   2 
"   3 
"   4 
"   5 
"   6 
OTHERVAL 1 
"   2 
"   3 
"   4 
"   5 
"   6 
WHATEVER 1 
"   2 
"   3 
"   4 
"   5 
"   6 

अधिकांश चयनात्मक स्तंभ की ओर जाता है ...

B A 
- -------- 
1 AARDVARK 
" DIFFVAL 
" OTHERVAL 
" WHATEVER 
2 AARDVARK 
" DIFFVAL 
" OTHERVAL 
" WHATEVER 
3 AARDVARK 
" DIFFVAL 
" OTHERVAL 
" WHATEVER 
4 AARDVARK 
" DIFFVAL 
" OTHERVAL 
" WHATEVER 
5 AARDVARK 
" DIFFVAL 
" OTHERVAL 
" WHATEVER 
6 AARDVARK 
" DIFFVAL 
" OTHERVAL 
" WHATEVER 
यहां तक ​​कि इस trival उदाहरण में

, (A, B)(B, A) के 18 की तुलना में 20 छोड़े जाने योग्य स्लॉट है। सूचकांक संपीड़न या सूचकांक छोड़ने से बेहतर उपयोगिता पर अधिक व्यापक असमानता उत्पन्न होगी।

जैसा कि अधिकांश ट्यूनिंग हेरिस्टिक्स के मामले में हमें वास्तविक मूल्यों और यथार्थवादी वॉल्यूम का उपयोग करके बेंचमार्क करना होगा। यह निश्चित रूप से एक परिदृश्य है जहां डेटा स्कू के विभिन्न दृष्टिकोणों की प्रभावशीलता का नाटकीय प्रभाव हो सकता है।


"मुझे लगता है कि यदि आप एक उच्च चयनात्मक पहले सूचकांक तो है - एक प्रदर्शन के नजरिए से - आप अच्छी तरह से कर दूँगा यह पहली डाल करने के लिए।"

यदि हमारे पास अत्यधिक चुनिंदा कॉलम है तो हमें इसे स्वयं का एक सूचकांक बनाना चाहिए। एक मुट्ठी भर पंक्तियों पर एक फ़िल्टर ऑपरेशन से बचने के अतिरिक्त लाभ एक समग्र सूचकांक को बनाए रखने के ऊपरी हिस्से से अधिक होने की संभावना नहीं है।

मल्टी स्तंभ अनुक्रमणिका सबसे अधिक उपयोगी हमारे पास जब हैं: मंझला चयनात्मकता के

  • दो या अधिक स्तंभों,
  • जो अक्सर एक ही क्वेरी में उपयोग किया जाता है।
+0

हाय। मैं आपके बिंदु पर स्पष्ट नहीं हूँ 4. क्या आप समझा सकते हैं? आम तौर पर मैं * सबसे * चुनिंदा कॉलम पहले रखूंगा। जब मैंने सोचा था कि हिस्टोग्राम उपयोगी रूप से सूचकांक को पूरी तरह से छोड़ने के लिए सीबीओ का नेतृत्व कर सकता है तो मैं केवल कम से कम चुनिंदा कॉलम डालूंगा। –

+0

अतिरिक्त संपादन एपीसी के लिए धन्यवाद - आपका बिंदु स्पष्ट रूप से बनाया गया है। इसके बारे में आपकी टिप्पणी के बारे में बेंचमार्क की जरूरत है अच्छी तरह से बनाया गया है। मुझे लगता है कि यदि आपके पास एक अत्यधिक चुनिंदा पहली अनुक्रमणिका है - तो प्रदर्शन परिप्रेक्ष्य से - आपको इसे पहले रखना अच्छा होगा। बेंचमार्क ... बेंचमार्क ... बेंचमार्क ... –

3
  1. यदि एक स्तंभ एक क्वेरी में अकेले प्रयोग किया जाता है ओरेकल एक कम कुशल स्कैन सूचकांक पहुँच छोड़ पथ का उपयोग करेगा कि क्या यह प्रमुख स्तंभ सूचकांक
  2. की संबंधित चयनात्मकता पर निर्भर करता है में नहीं है कॉलम
  3. कोई
  4. मैं सूचकांक में स्तंभों को शामिल प्रश्नों को देखो और सबसे ज़्यादा पूछे
  5. से सूचकांक में अपनी स्थिति रैंक होगा
4

लेकिन ओरेकल खुद के अनुसार, यह पहली उच्चतम प्रमुखता के साथ स्तंभ डाल करने के लिए बेहतर है: कम्पोजिट इंडेक्स

के लिए

http://docs.oracle.com/cd/B10500_01/server.920/a96533/data_acc.htm#2174

आदेश कुंजी सभी कुंजियों कहां खंड में उपयोग किया जाता है समान रूप से, फिर CREATE INDEX कथन में सबसे चुनिंदा से कम से कम चुनिंदा से इन चाबियों को ऑर्डर करने से क्वेरी प्रदर्शन में सुधार होता है।

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