मुझे कैसे पता चलेगा कि तालिका के लिए क्या इंडेक्स बनाने हैं?


33

क्या कोई तरीका है जिससे मैं यह जान सकूं कि टेबल के लिए कौन सी इंडेक्स बनाने के लिए सबसे अच्छा तरीका है?


11
वहाँ है। प्रयास करें use-the-index-luke.com उदाहरण के लिए।
देज़सो

मैंने जो उत्तर सबसे अधिक देखा है, वह यह है कि आपको प्राथमिक कुंजियों और स्तंभों को अनुक्रमित करना चाहिए जिनका आप WHEREखंडों में उपयोग करते हैं।
Oskar Persson

कृपया ऐसा मत करो। एक प्राथमिक कुंजी परिभाषित करती है कि डेटा को तालिका पर भौतिक रूप से कैसे सॉर्ट किया गया है और इसकी अपनी अपनी राय है। आपको प्राथमिक कुंजी को बहुत सावधानी से चुनना होगा क्योंकि इसका उपयोग आपके सभी अन्य अनुक्रमितों में भी किया जाता है। देखें: sqlskills.com/blogs/kimberly/…
अली

4
@AliRazeghi यह (भौतिक छँटाई) कुछ DBMSes (कुछ परिस्थितियों में) में सच है और दूसरों में नहीं। उदाहरण के लिए, PostgreSQL में सही नहीं है।
dezso

वोटिंग बैक अप!
अली रज़ेगी

जवाबों:


29

अंगूठे के छोटे नियम। (इनमें से कुछ स्वचालित रूप से बनाए जाते हैं, लेकिन संभवतः बाद में अपने dbms के आधार पर मैन्युअल रूप से बाद में गिराए जा सकते हैं। यह मत मानिए कि आप हमेशा PostgreSQL पर काम करेंगे ।)

  • सूचकांक हर प्राथमिक कुंजी।
  • सूचकांक हर विदेशी कुंजी।
  • एक जोइन क्लॉज में प्रयुक्त हर कॉलम को इंडेक्स करें।
  • WHERE क्लॉज में प्रयुक्त हर कॉलम को इंडेक्स करें।
  • आपके डब का समर्थन करने वाले "गूढ़" अनुक्रमण विकल्पों को जानने के लिए अपने दस्तावेज़ का अध्ययन करें।

प्रत्येक प्राथमिक कुंजी का मतलब है कि बहु-स्तंभ प्राथमिक कुंजी में सभी स्तंभों को शामिल करने वाला एक एकल सूचकांक होना चाहिए। यदि आप मल्टी-कॉलम प्राथमिक कुंजी घोषित करते हैं तो PostgreSQL यह इंडेक्स स्वचालित रूप से बनाएगा।

ऐसे कई मामले हैं जिनमें एक एकल मल्टी-कॉलम इंडेक्स आपको कई सिंगल-कॉलम इंडेक्स की तुलना में बेहतर प्रदर्शन देता है। धीमी क्वेरी की निगरानी करें और यह पता लगाने के लिए परीक्षण करें कि कौन सा है।

मान लें कि अनुक्रमण में कोई परिवर्तन कुछ डेटाबेस गतिविधियों में सुधार करेगा और दूसरों को नीचा दिखाएगा। मैं SQL बयानों का एक सेट है, जो मैं पहले और बाद में अनुक्रमित करने के लिए परिवर्तन कर सकते हैं प्रोफ़ाइल के लिए उपयोगी पाते हैं। इस सेट में SELECT, INSERT, UPDATE और DELETE स्टेटमेंट शामिल हैं।

आपके विशेष dbms के लिए डॉक्स का अध्ययन करने के लिए कोई विकल्प नहीं है।

  • पैदा करना
  • अनुक्रमणिका (विशेष रूप से अनुक्रमणिका पर अनुक्रमणिका, आंशिक अनुक्रमणिका पर और अनुक्रमणिका के उपयोग की जाँच पर ध्यान दें)

14

क्या @Catcall पहले से ही प्रदान की है , और एक छोटे सुधारात्मक जोड़ने के अलावा:

मैंने एसओ पर हाल ही में संबंधित उत्तर में कुछ मूल बातें भी कवर की हैं ।

अब तक के उत्तर आपको इंगित करते हैं कि आपको प्राथमिक कुंजियों पर अनुक्रमित बनाने की आवश्यकता है, लेकिन यह PostgreSQL में मामला नहीं है (आंशिक अपवाद लागू होते हैं)। मैं मैनुअल यहाँ उद्धृत करता हूँ :

जब एक अद्वितीय बाधा या प्राथमिक कुंजी को किसी तालिका के लिए परिभाषित किया जाता है, तो PostgreSQL स्वचालित रूप से एक अद्वितीय सूचकांक बनाता है। सूचकांक कॉलम कि प्राथमिक कुंजी या अद्वितीय बाधा बना शामिल किया गया है (यदि उपयुक्त एक multicolumn सूचकांक), और तंत्र है जो बाधा को लागू करता है।

बोल्ड जोर मेरा।

आप मल्टी-कॉलम इंडेक्स के दूसरे या बाद के कॉलम के लिए अतिरिक्त इंडेक्स बनाना चाह सकते हैं , लेकिन पहले वाला आमतौर पर एक मल्टीकोल्यूमेंट इंडेक्स द्वारा ठीक कवर किया जाता है - सिवाय इसके कि जब अतिरिक्त कॉलम इंडेक्स को अधिक बड़ा बनाते हैं। हमने चर्चा की कि इस संबंधित प्रश्न के तहत महान विस्तार से:

क्या पहले क्षेत्र पर प्रश्नों के लिए एक समग्र सूचकांक भी अच्छा है?

बहुरंगी अनुक्रमणिका , आंशिक सूचकांक और भावों पर अनुक्रमणिका विशेष रूप से PostgreSQL में शक्तिशाली उपकरण हैं। चूंकि PostgreSQL 9.2 में सूचकांक-केवल स्कैन भी हैं , अन्य RDBMS में "इंडेक्स को कवर करने" के बराबर। यह अन्य प्रकार का सूचकांक नहीं है, लेकिन मौजूदा सूचकांक प्रकारों के साथ RDBMS की एक नई क्षमता है।

प्रत्येक सूचकांक विशिष्ट लागत वहन करता है , इसलिए वास्तव में अनुक्रमण को अनुकूलित करने के लिए कुछ बुनियादी ज्ञान के आसपास कोई रास्ता नहीं है। सिर्फ ज्यादा इंडेक्स बनाने से अच्छे से ज्यादा नुकसान हो सकता है। विशेष रूप से, अनुक्रमणिका HOT अपडेट को प्रदर्शन में सुधार करने से रोक सकती है ।

आम तौर पर, ऑपरेशन लिखना ( DELETE, UPDATE) अधिक महंगा हो जाता है (लेकिन लाभ भी हो सकता है!), जबकि ऑपरेशन पढ़ें ( SELECT) आम तौर पर सिर्फ लाभ होता है। बहुत सारे इंडेक्स कैश मेमोरी को समाप्त कर सकते हैं ताकि रीड ऑपरेशंस को भी नुकसान हो सके।

अंत में, यह अनुरक्षण अनुरक्षण पर विकी पृष्ठ को डुप्लिकेट या अप्रयुक्त इंडेक्स (अन्य चीजों के बीच) खोजने के लिए उपकरण प्रदान करता है।


अगर मुझे सही याद है, तो पीके के ऊपर ऑटोमैटिक इंडेक्स भी Oracle v। पर बनाया गया है।> = 10 और Sql सर्वर> = 2008
EAmez

1

दो विकल्प हैं।

  1. आप इसे करते हैं।
  2. प्रौद्योगिकी यह करता है।

इसे स्वयं करने का उत्तर यहाँ बहुत ही सुंदर ढंग से प्रलेखित है। तो चलिए कुछ और देखते हैं।

Pghero

यदि आप कुछ स्वचालित सलाह चाहते हैं तो पगेरो आपकी सहायता कर सकता है।

कहा कि इसकी कुछ कमियां हैं।

  1. यह केवल WHEREऔर पर काम करता है ORDER BY, नहीं JOINS
  2. यह केवल प्रतिशत NULL, और अलग-अलग मूल्यों पर आँकड़ों का उपयोग करता है।

अधिक जानकारी के लिए इस वीडियो को देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.