Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल:क्या कॉलम ऑर्डर इंडेक्स में मायने रखता है?

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

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

संपादित करें (निक पियरपॉइंट की टिप्पणी के जवाब में)

सबसे कम चयनात्मक कॉलम के साथ अग्रणी होने के दो मुख्य कारण हैं

  1. सूचकांक संपीड़न
  2. इंडेक्स स्किप पढ़ता है

ये दोनों अपने जादू का काम यह जानने से करते हैं कि वर्तमान स्लॉट में मूल्य पिछले स्लॉट के मूल्य के समान है। नतीजतन हम मूल्य परिवर्तन की संख्या को कम करके इन तकनीकों से रिटर्न को अधिकतम कर सकते हैं। निम्नलिखित उदाहरण में, 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

इस तुच्छ उदाहरण में भी, (A, B) (B, A) . के 18 की तुलना में 20 स्किप करने योग्य स्लॉट हैं . एक व्यापक असमानता इंडेक्स कंप्रेशन या इंडेक्स स्किप रीड्स से बेहतर उपयोगिता पर अधिक आरओआई उत्पन्न करेगी।

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

<ब्लॉककोट>

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

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

बहु-स्तंभ अनुक्रमणिकाएँ सबसे उपयोगी तब होती हैं जब हमारे पास:

  • मध्यम चयनात्मकता के दो या अधिक स्तंभ,
  • जिन्हें अक्सर एक ही क्वेरी में इस्तेमाल किया जाता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उपयोगकर्ता के लिए सभी सक्रिय और निष्क्रिय ऑरैकल सत्रों को कैसे समाप्त करें

  2. Oracle के डंप (सिस्टिमस्टैम्प) बाइट्स का अर्थ

  3. 2 कार्य जो Oracle में एक तिथि से महीना लौटाते हैं

  4. Concat फ़ंक्शन काम नहीं कर रहा है - तर्कों की अमान्य संख्या

  5. Oracle पहचान कॉलम और चयन में डालें