मैं कुछ हद तक इस सवाल का जवाब पहले से ही जानता हूं, लेकिन मुझे हमेशा ऐसा लगता है कि इस विषय पर मुझे कुछ और चुनने की जरूरत है।
मेरी बुनियादी समझ यह है कि आम तौर पर बोलना, एक एकल सूचकांक जिसमें बस उन सभी क्षेत्रों को शामिल किया जाता है जिन्हें आप किसी भी समय पर क्वेरी / छांट सकते हैं, उपयोगी होने की संभावना नहीं है, फिर भी मैंने इस प्रकार की चीज देखी है। जैसा कि, किसी ने सोचा, "ठीक है, अगर हम सिर्फ यह सब सामान एक इंडेक्स में डालते हैं, तो डेटाबेस इसका उपयोग कर सकता है कि इसे क्या चाहिए", कभी भी वास्तविक प्रश्नों को चलाने के लिए एक निष्पादन योजना देखे बिना।
एक तालिका की तरह कल्पना करें:
id int pk/uid
name varchar(50)
customerId int (foreign key)
dateCreated datetime
मैं सहित एक भी सूचकांक देख सकते हैं name
, customerId
और dateCreated
खेतों।
लेकिन मेरी समझ यह है कि इस तरह के सूचकांक का उपयोग क्वेरी में नहीं किया जाएगा, उदाहरण के लिए:
SELECT [id], [name], [customerId], [dateCreated]
FROM Representatives WHERE customerId=1
ORDER BY dateCreated
इस तरह की क्वेरी के लिए, यह मुझे लगता है कि एक बेहतर विचार एक इंडेक्स होगा जिसमें फ़ील्ड्स customerId
और dateCreated
फ़ील्ड्स शामिल होंगे, जिसमें customerId
फ़ील्ड 'पहले' होगा। यह एक सूचकांक बनाएगा जिसमें डेटा इस तरह से व्यवस्थित होगा कि यह क्वेरी जल्दी से यह पा सके कि उसे क्या चाहिए - इस क्रम में।
एक और चीज जो मैं देख रहा हूं, शायद पहले जितनी बार, प्रत्येक क्षेत्र पर व्यक्तिगत सूचकांक है; हां, तो एक-एक पर name
, customerId
और dateCreated
खेतों।
पहले उदाहरण के विपरीत, इस प्रकार की व्यवस्था मुझे कभी-कभी कम से कम आंशिक रूप से उपयोगी लगती है; क्वेरी का निष्पादन योजना दिखा सकती है कि कम से कम यह customerId
रिकॉर्ड का चयन करने के लिए सूचकांक का उपयोग कर रहा है , लेकिन यह dateCreated
उन्हें सॉर्ट करने के लिए फ़ील्ड के साथ सूचकांक का उपयोग नहीं कर रहा है।
मुझे पता है कि यह एक व्यापक प्रश्न है, क्योंकि किसी भी विशेष तालिकाओं के किसी विशेष प्रश्न का विशिष्ट उत्तर आमतौर पर यह देखने के लिए है कि निष्पादन योजना क्या कहती है कि वह क्या करने जा रही है, और अन्यथा तालिका (एस) की बारीकियों और प्रश्नों को लें लेखा। इसके अलावा, मुझे पता है कि यह इस बात पर निर्भर करता है कि किसी विशेष सूचकांक को बनाए रखने के ओवरहेड के विपरीत एक क्वेरी कितनी बार चल सकती है।
लेकिन मुझे लगता है कि मैं जो पूछ रहा हूं वह इंडेक्स के लिए एक सामान्य 'शुरुआती बिंदु' के रूप में है, क्या विशिष्ट, अक्सर-खींचे गए प्रश्नों के लिए विशिष्ट इंडेक्स होने और WHERE या ORDER BY फ़ील्ड के विचार का कोई मतलब है?