2012-09-14 11 views
18

मैं अपने एसक्यूएल सर्वर ट्यूनिंग कर रहा हूँ और जब मैं शीर्ष पर मेरे प्रश्नों में से एक के लिए मेरे कार्य योजना लागू करके दिखाने इसे पढ़ता है:लापता सूचकांक विवरण एसक्यूएल

"गुम सूचकांक (प्रभाव 99.7782): बनाएँ nonclustered अनुक्रमणिका ..."

तो मैं लापता सूचकांक विवरण को देखा है और यह इस दिखा रहा है:

/* 
Missing Index Details from ExecutionPlan1.sqlplan 
The Query Processor estimates that implementing the following index could improve the query cost by 99.7782%. 
*/ 

/* 
USE [phsprod] 
GO 
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] 
ON [dbo].[address] ([userid]) 

GO 
*/ 

मैं केवल अब करीब एक महीने तक एसक्यूएल के साथ काम कर रहा है और मैं अपने सभी तालिकाओं है के रूप में इस के साथ कुछ भी कभी नहीं किया है पहले से ही मेरे लिए बनाया गया है। क्या कोई इस बारे में किसी भी विचार को समझाने/देने में मदद कर सकता है कि इसके साथ क्या करना है? धन्यवाद।

+4

ध्यान दें कि तालिकाओं की सामग्री को संशोधित (जोड़ा गया, हटाया गया, अपडेट किया गया), और डिस्क स्थान में एक छोटी सी लागत में संशोधित होने पर रखरखाव (सिस्टम द्वारा) में थोड़ी देर की लागत पर प्रसंस्करण प्रश्नों को बिताए गए समय को कम करता है, प्लस पर विचार करने के लिए अधिक इंडेक्स होने पर पूछताछ योजनाओं का विश्लेषण करने के लिए अतिरिक्त समय के मामले में आम तौर पर अनावश्यक लागत। पूरी तरह से, सूचकांक अच्छे हैं; बहुत अधिक अनुक्रमणिका एक समस्या हो सकती है। उन्हें जोड़ने में विवेकाधिकार का प्रयोग करें। –

उत्तर

22

इसका मतलब है कि SQL सर्वर यह सुझाव दे रहा है कि आपकी क्वेरी इंडेक्स के साथ तेजी से चल सकती है। इंडेक्स ओवरहेड और डिस्क स्टोरेज जोड़ते हैं, इसलिए आपको इस संकेत को अनदेखा करना चाहिए जब तक कि क्वेरी उत्पादन में प्रदर्शन की समस्या न दे।

सूचकांक बनाने के लिए, use के बाद बयान uncomment, एक असली नाम के साथ [<Name of Missing Index, sysname,>] की जगह है, और इसे चलाने:

USE [phsprod] 
GO 
CREATE NONCLUSTERED INDEX IX_Address_UserId 
ON [dbo].[address] ([userid]) 
+3

+1, हालांकि मैं कहूंगा कि सूचकांक सिफारिशों को नमक के अनाज के साथ लिया जाना चाहिए। उन्हें किसी ऐसे व्यक्ति द्वारा लागू किया जाना चाहिए जो केंद्रीय रूप से स्कीमा का प्रबंधन करता है और * सभी * प्रश्नों को समझता है न केवल यह। – usr

14

इसका मतलब है कि SQL सर्वर का सुझाव दे रहा है जो आपकी क्वेरी तेजी से इस सूचकांक के साथ चला सकते हैं।

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

वास्तव में, इंडेक्स ओवरहेड और डिस्क संग्रहण जोड़ते हैं। लेकिन, यह प्रदर्शन में भी सुधार कर सकते हैं। उदाहरण के लिए, यदि आप हमेशा "उपयोगकर्ता आईडी" के आधार पर अपनी तालिका में खोज करते हैं, तो हो सकता है कि वह उस कॉलम पर एक इंडेक्स जोड़ने के लिए भुगतान कर सकता है, क्योंकि एसक्यूएल इस इंडेक्स को यूज़िन करने में सक्षम होगा।

इस बारे में थोड़ा सा सोचें जैसे कि आप एक डिक्शनरी में एक शब्द खोजते हैं। यदि आप "कुत्ते" शब्द की तलाश में हैं, तो आप "डी" के लिए खोज रहे हैं और फिर शब्द "कुत्ते" शब्द को खोजने के लिए "डू" से शुरू होते हैं।

यदि शब्द डिक्शनरी में वर्णमाला क्रम में नहीं थे, तो आपको "कुत्ते" शब्द खोजने के लिए संपूर्ण उपन्यास खोजना होगा!

क्लस्टर सूचकांक (या प्राथमिक कुंजी) आपके कॉलम का क्रम है। अभी, ऐसा लगता है कि आपके पास "userid" कॉलम पर कोई अनुक्रमणिका नहीं है। तो एसक्यूएल सर्वर (संभवतः) पूरी तालिका को स्कैन करने के लिए है जब तक वह उपयोगकर्ता आईडी नहीं पाता।

यदि आप एक नॉनक्लस्टर्ड इंडेक्स जोड़ते हैं, तो यह आपकी तालिका को फिर से ऑर्डर नहीं करेगा, लेकिन यह SQL सर्वर को बताएगा कि उसे जिस उपयोगकर्ता को आप चाहते हैं उसे ढूंढने के लिए उसे किस श्रेणी में खोजना चाहिए। (जैसे "डिक्शनरी में, पृष्ठ 20 और 30 के बीच") तो इसे खोजने के लिए पूरी तालिका को खोजना नहीं होगा।

लेकिन इसका मतलब यह भी है कि जब आप तालिका में नया डेटा जोड़ते हैं, या हटाते हैं, या संशोधित करते हैं, तो उसे अपनी अनुक्रमणिका को अद्यतित रखना होगा। आम तौर पर, कुछ इंडेक्स चोट नहीं पहुंचाते हैं, लेकिन आपको यह सुनिश्चित करने की ज़रूरत है कि उनकी आवश्यकता है। यदि आप बहुत अधिक जोड़ते हैं तो आप प्रदर्शन को चोट पहुंचाने के लिए बहुत अधिक इंडेक्स जोड़ना नहीं चाहते हैं।

और यदि आपकी तालिका में केवल कुछ सैकड़ों पंक्तियां हैं, तो शायद यह आपको प्रदर्शन का एक बड़ा सुधार नहीं दिखाएगी। लेकिन समय के साथ, जब आपकी मेज बढ़ती है, तो इससे कोई फर्क पड़ सकता है।

आशा है कि मदद करता है!

+1

मेरे काम पर, हमारे पास प्रामाणिक रूप से कोई अनुक्रमणिका नहीं है के साथ बहुत पुराने डेटाबेस हैं। हमारे डेटाबेस पर इंडेक्स जोड़ना (जो 100 से अधिक के रूप में बड़ा हो सकता है, कई बार टेबल के साथ, कभी-कभी पंक्तियों में से एक लाख से अधिक) वास्तव में प्रदर्शन में सुधार करने में मदद करता है। –

+0

मेरे पास उस विशिष्ट तालिका में लगभग 83,000 पंक्तियां हैं। –

+3

प्रदर्शन अंतर को देखने के लिए आपको नए इंडेक्स के साथ और बिना कुछ प्रश्न चलाने की कोशिश करनी चाहिए। आप यह देखने के लिए निष्पादन योजना भी प्रदर्शित कर सकते हैं कि यह नई अनुक्रमणिका के साथ बेहतर है या नहीं। और, आपको अन्य प्रश्नों की जांच करनी चाहिए कि एप्लिकेशन उस तालिका पर करता है। सत्यापित करें कि यह अन्य प्रश्नों को भी बेहतर बनाता है, या कम से कम, यह अन्य प्रश्नों के लिए प्रदर्शन खराब नहीं करता है। –

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