क्या डेटाबेस सूचकांकों को जोड़ना समय से पहले अनुकूलन है?


61

मेरे एक सहयोगी ने आज सुझाव दिया कि हम अपने आवेदन में सभी प्रश्नों से गुजरते हैं और तदनुसार सूचकांक जोड़ते हैं।

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

अपने डेटाबेस को डिज़ाइन करते समय आम सहमति क्या होती है, क्या आपको हर बार नई क्वेरी लिखते समय एक मिलान सूचकांक जोड़ना चाहिए? या यह बेहतर है कि केवल निगरानी करें और देखें कि यह कैसे जाता है?


32
यह राय का विषय हो सकता है, हालाँकि मुझे लगता है कि कुछ सूचियों को प्राथमिकता में जोड़ा जा सकता है।
बेसिल स्टारीनेवविच

2
@BasileStarynkevitch पूरी तरह से इस बात पर सहमत हैं कि हमारे पास पहले से ही प्राथमिक कुंजी सूचकांक और कार्य हैं। लेकिन आप रेखा कहां खींचते हैं?
मार्को डी जोंग

1
अनुभव से मेरे दो सेंट: मैं अपने डेटाबेस के सबसेट पर अपने कुछ शुरुआती खोज प्रश्नों का परीक्षण कर रहा था। मेरे द्वारा चलाए गए परीक्षण मेरी स्थानीय प्रतिलिपि पर पूरी तरह से ठीक थे। फिर मैंने उस एप्लिकेशन को स्टेजिंग क्षेत्र पर धकेल दिया जो पूर्ण डेटाबेस को होस्ट करता है। मेरे परीक्षण <500 ms में चले , जबकि मंचन प्रणाली को हल करने में कई मिनट लगे । मेरा बॉस पूरी तरह से उलझन में था कि ऐप लोड क्यों नहीं हो रहा है। स्पष्ट करें -प्रकार के संचालन आपके मित्र हैं ... कम से कम बड़ी तालिकाओं पर अनुक्रमिक स्कैन की तलाश करें, बहुत कम से कम!
क्रिस सिरफिसेस

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

3
बस हमेशा याद रखें: एक सूचकांक कोई जादुई चीज नहीं है जो आपके प्रश्नों को गति देगा। एक सूचकांक अधिकांश डीएमएल-ऑपरेशंस पर लागत का अनुमान लगाएगा और प्रकार के आधार पर जब बहुत से लोग एक ही टेबल को अपडेट करते हैं तो बहुत प्रतीक्षा हो सकती है। प्रश्नों के लिए: ऐसे कई प्रश्न हैं, जो एक सूचकांक से बिल्कुल भी लाभान्वित नहीं होते हैं, जहां एक एफटीएस सबसे तेज है या जहां विभाजन आपके लिए सभी काम करता है। - केवल इंडेक्स जोड़ें जहां आप जानते हैं कि वे फायदेमंद होंगे!
फाल्को

जवाबों:


132

समय-समय पर अनुकूलन एक अस्पष्ट, सहज ज्ञान की वजह से किसी चीज का "अनुकूलन" कर रहा है जो कि, y'know, यह शायद धीमा होगा, विशेष रूप से कोड पठनीयता और स्थिरता की गिरावट के लिए । इसका मतलब यह नहीं है कि प्रदर्शन के संबंध में अच्छी तरह से स्थापित अच्छी प्रथाओं का पालन नहीं किया जाएगा।

कभी-कभी यह आकर्षित करने के लिए एक कठिन रेखा है, लेकिन मैं निश्चित रूप से कहूंगा कि लाइव होने से पहले किसी भी सूचकांक को जोड़ना बहुत देर से अनुकूलन नहीं है ; यह शुरुआती दत्तक-आपके सबसे उत्सुक और सबसे महत्वपूर्ण उपयोगकर्ताओं को दंडित करेगा - और उन्हें आपके उत्पाद का एक नकारात्मक दृष्टिकोण देगा, जिसे वे फिर समीक्षाओं, चर्चाओं आदि में चारों ओर फैला देंगे, दर्द को खोजने के लिए निगरानी प्रश्नों की निगरानी करें जिन्हें अनुक्रमण की आवश्यकता है अच्छा विचार है, लेकिन मुझे लगता है कि बीटा से बाद में ऐसा करने के लिए सुनिश्चित करेंगे।


11
हां, इसे लोड परीक्षण चरण में किया जाना चाहिए
अल्वारो

152
अनुकूलन से पहले आपको पता है कि धीमे भागों में समयपूर्व अनुकूलन कहाँ है। इससे पहले कि आप जानते हैं कि धीमे भागों में समय से पहले चीज को जारी करना जारी है !
मैथमैटिकलऑर्चिड

4
@ मैमेटेमिकलऑर्किड: यह एक बहुत अच्छा काम कर रहा है! क्या मैं इसे कहीं और उधार ले सकता हूं?
पीटर जार्जेंस

3
@PieterGeerkens यकीन है, अपने आप को बाहर दस्तक! ;-) मैं बस दुखी हूँ कि 91+ अपवोट मुझे कोई प्रतिनिधि नहीं कमाते ... हेह।
गणितीयऑक्रिड

3
@ मैमेटमिकलऑर्चिड का उत्तर होना चाहिए था। कभी भी "सबसे छोटे-से-सीधे-टू-पॉइंट" उत्तर के लिए दौड़ सकता है।
माइंडविन

48

एक बार धीमी गति से प्रश्नों की निगरानी करें, जबकि हम लाइव हैं

क्योंकि कुछ भी नहीं कहता है कि गुणवत्ता आपके उपयोगकर्ताओं को डिजाइन की कमी के कारण पीड़ित करती है!

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


10
सही। डेटाबेस डिजाइन के भाग के रूप में अनुक्रमित पर विचार करें। किसी भी क्वेरी के लिए पूर्ण तालिका स्कैन से बचने के लिए अनुक्रमित का उपयोग करें जो अंत-उपयोगकर्ता आमतौर पर वास्तविक समय में कर रहा होगा।
AE

1
@DocBrown मुझे यकीन नहीं है, जब आप एक मेज डिजाइन करते हैं (या होना चाहिए) तो कुछ समझ में आता है कि इसका उपयोग कैसे किया जाएगा। एक व्यक्ति तालिका आईडी, या संभवत: उपनाम द्वारा दी जाएगी। यदि कोई DoB, पते या फोन नंबर के माध्यम से एक्सेस करना शुरू करता है तो आप हर क्षेत्र के लिए अनुक्रमित जोड़ने जा रहे हैं - और वह कहां समाप्त होता है ?!
gbjbaanb

4
@ जीबीजैनब: यह तब समाप्त होता है जब लोग उत्पाद में सुविधाओं को जोड़ना बंद कर देते हैं, जो आपकी कार्यप्रणाली के आधार पर "कभी नहीं" हो सकता है।
स्टीव जेसोप

1
@SteveJessop मेरा मतलब है कि आप उन प्राथमिक स्तंभों के अनुसार इंडेक्स करते हैं जिन्हें आप एक्सेस करना चाहते हैं। एक व्यक्ति तालिका के लिए, आपके पास एक खोज कार्य हो सकता है (यदि आप अपना उपयोगकर्ता नाम भूल जाते हैं तो आप उदाहरण के लिए ईमेल पर खोज सकते हैं) लेकिन बाद में आप हमेशा आईडी का उपयोग करते हैं। इसलिए ID ही एकमात्र ऐसा है जिसे अनुक्रमण की आवश्यकता है। यदि आप अन्य क्षेत्रों पर बहुत अधिक खोज करते हैं, तो आप एक इंडेक्स चाहते हैं, यह समय में निकल जाएगा, लेकिन आम तौर पर आप हर कॉलम को इंडेक्स नहीं करना चाहते हैं क्योंकि किसी ने कभी भी एक गैर-मानक क्वेरी लिखने का फैसला किया है, लेकिन आप कर सकते हैं इन "वन-ऑफ" मामलों के लिए एक अलग तंत्र का उपयोग करें।
gbjbaanb

2
@ जीबीजैनब: निश्चित रूप से, लोगों को बार-बार एक टेबल पर एक ही उपनाम को नहीं देखना चाहिए, क्योंकि यह उनके लिए तालिका की उचित कुंजी की तुलना में थोड़ी अधिक सुविधाजनक संभाल है। मैं कहूंगा कि यह मामला है कि क्या तालिका को उपनाम पर अनुक्रमित किया गया है या नहीं, वास्तव में, क्योंकि कोड के एक खंड के बारे में बहुत कुछ गड़बड़ है जो मानता है कि यह "एक ही उपयोगकर्ता" पर काम कर रहा है, लेकिन इसे व्यक्त करने के लिए काफी प्रबंधन नहीं कर सकता है आईडी याद करके कोड में :-) मैं उन मामलों की कल्पना कर रहा था, जहां रिवर्स-लुकअप की आवश्यकता का तब तक अनुमान नहीं लगाया जाता था जब तक कि ग्राहक ने इसका उल्लेख नहीं किया ...
स्टीव जेसप

26

"प्रीमेच्योर ऑप्टिमाइज़ेशन", अपने अपमानजनक अर्थ में, महंगा अनुकूलन का मतलब है जिसकी आवश्यकता नहीं हो सकती है। इसका मतलब यह नहीं है कि दिवालियापन को रोकने के लिए नवीनतम संभव बिंदु से पहले लागू सभी अनुकूलन!

विशेष रूप से, यह लाइव होने से पहले प्रदर्शन परीक्षणों के आधार पर अनुकूलन करने के लिए वैध है, यह सुनिश्चित करने के लिए कि आप अपने ऐप को पूरी तरह से चूसना नहीं करने के लिए कुछ समझदार (यद्यपि अनुमानित) आवश्यकताओं को पूरा कर सकते हैं।

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

किसी भी क्वेरी के लिए पूर्ण तालिका स्कैन से बचने के लिए अनुक्रमित का उपयोग करें जो अंत-उपयोगकर्ता आमतौर पर वास्तविक समय में कर रहा होगा

कम से कम, उन तालिकाओं के लिए जिन्हें उपयोग में बढ़ने की योजना है।

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


20

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

आप गुणवत्ता-आश्वासन जैसे अपने अंतिम-उपयोगकर्ताओं और उत्पादन वातावरण का इलाज नहीं कर सकते। अधिक शब्दों में, आप कह रहे हैं कि आप इसका उत्पादन करेंगे। मुझे नहीं लगता कि यह सही तरीका है, और मुझे लगता है कि दृष्टिकोण हर दिन बहुत गलत है

आपको एक बात ध्यान में रखने की आवश्यकता है, क्योंकि आप इसे एक व्यापक ब्रश के साथ पेंट नहीं कर सकते हैं।

आपका सामान्य कार्यभार क्या है ?

यह स्पष्ट या नीरस लग सकता है, लेकिन यह व्यवहार में महत्वपूर्ण है। यदि आपके पास 10 प्रश्न हैं जो आपके कार्यभार का 98% बनाते हैं (काफी सामान्य है, तो विश्वास करें या नहीं), मेरी सिफारिश उत्पादन से पहले एक कठिन विश्लेषण होगा । यथार्थवादी और प्रतिनिधि डेटा के साथ, सुनिश्चित करें कि वे 10 प्रश्न अच्छे हैं क्योंकि वे संभवतः हो सकते हैं ( परिपूर्ण मूल्यवान समय की बर्बादी है, और लगभग प्राप्त नहीं है)।

के लिए अन्य 200 प्रश्नों कि काम का बोझ के 2% है , उन लोगों को कि सबसे अधिक संभावना प्रयास की एक टन के लायक नहीं हैं, और उत्पादन में समस्या निवारण विषमताएं पर्फ़ कोने-केस बना देगा। यह भी एक वास्तविकता है, और बहुत बुरी बात नहीं है। लेकिन इसका मतलब यह नहीं है कि सर्वोत्तम प्रथाओं को अनुक्रमित करने की उपेक्षा करें या डेटा पुनर्प्राप्ति के बारे में अनुमानित अनुमान लगाएं।

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

परंतु...

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

ज्यादातर चीजों की तरह, एक स्वस्थ संतुलन है।

एक मजेदार छोटे पक्ष के रूप में ... "सूचकांक" का बहुवचन

"सूचकांक" वित्तीय लोगों के लिए हैं

"अनुक्रमित" हमारे लिए हैं


2
इसके लिए अधिक वोटों की जरूरत है। मैं और अधिक सहमत नहीं हो सकता।
रबरडाक

"बस मामले में" बिट के लिए +1 (कि होगा समय से पहले अनुकूलन हो)। अगर मैं "सामान्य वर्कलोड" बिट के लिए फिर से अपवोट कर सकता था।
डेविड

उम्मीद है कि आप पहले से जानते होंगे कि कौन से 10 प्रश्न 98% के हैं, और कौन से नहीं हैं।
पाओलो एबरमन

@ Pa @loEbermann मोस्ट DBMS 'में उस जानकारी को काफी जल्दी और आसानी से कैप्चर करने की क्षमता है। इस मामले में, नहीं जानने के लिए कोई बहाना नहीं है।
थॉमस स्ट्रिंगर

@ThomasStringer बेशक, यह केवल तभी काम करता है जब उत्पादन में जाने से पहले आपके परीक्षण के मामले किसी तरह से संबंधित होते हैं जो उत्पादन में वास्तविक उपयोगकर्ताओं द्वारा किया जाता है।
पाओलो एबरमन

4

नहीं, यह समय से पहले का अनुकूलन नहीं है, लेकिन इसे सही ढंग से किया जाना चाहिए क्योंकि कोई भी अनुकूलन होना चाहिए।

यहां है जो मुझे करना होगा:

  1. उत्पादन लोड की नकल करने के लिए पर्याप्त परीक्षण डेटा के साथ डेटाबेस को लोड करें। आपको यह 100% सटीक नहीं मिल सकता है, लेकिन यह ठीक है: बस पर्याप्त डेटा डालें। क्या एक तालिका में डेटा की एक निश्चित राशि है? इसे लोड करें। क्या आपके पास एक तालिका है जो बहुत सारा डेटा रखती है, जैसे कि जो भी तालिका इस साइट पर सवाल रखती है? केवल डमी डेटा के बावजूद कुछ मिलियन रिकॉर्ड लोड करें।
  2. अपने डेटाबेस सर्वर में प्रोफाइलिंग चालू करें
  3. स्वचालित स्क्रिप्ट (वॉल्यूम प्रदान करता है) और वास्तविक उपयोगकर्ताओं के संयोजन का उपयोग करके आवेदन पर बैंग (वे जानते हैं कि चीजों को कैसे तोड़ना है)।
  4. प्रोफाइलिंग डेटा की समीक्षा करें। क्या विशिष्ट प्रश्न धीमे हैं? स्पष्टीकरण योजनाओं की जांच करें और देखें कि क्या डेटाबेस सर्वर आपको बता रहा है कि यह एक सूचकांक चाहता है , लेकिन इसका कोई अस्तित्व नहीं है।

डेटाबेस सर्वर सॉफ्टवेयर के जटिल और बुद्धिमान टुकड़े हैं। वे आपको बता सकते हैं कि यदि आप कैसे सुनना चाहते हैं, तो उन्हें अनुकूलित करें।

कुंजी अनुकूलन से पहले और बाद में प्रदर्शन को मापने के लिए है और डेटाबेस को आपको यह बताने की आवश्यकता है कि उसे क्या चाहिए


3

ज्ञात समस्याओं के लिए सिद्ध पैटर्न के बाद (जैसे कि इसकी आईडी द्वारा रिकॉर्ड खोजना) समय से पहले कुछ भी नहीं है। यह सिर्फ समझदार है।

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


कुछ ऐसा करने के लिए एक अतिरिक्त 30 सेकंड खर्च करना जो प्रदर्शन में सुधार करने के लिए लगभग निश्चित है और इसे नुकसान पहुंचाने की संभावना नहीं है, यह "समय से पहले अनुकूलन" नहीं है। यदि किसी टेबल पर 90% ऑपरेशंस एक विशेष कॉलम को कुंजी के रूप में उपयोग करते हैं, तो या तो इसे इंडेक्स करने से प्रदर्शन में सुधार होगा, या प्रदर्शन कभी भी मामले में धीमा नहीं होगा, और इंडेक्स बनाने के लिए कोड जोड़ने से यह निर्धारित करने में कम समय लग सकता है कि क्या यह निर्धारित है वास्तव में आवश्यक है।
सुपरकैट

@supercat "कभी नहीं" ... जब तक आप अपने उत्पादन के माहौल में गतिरोध देखना शुरू नहीं करते हैं ...
svidgen

आप किस तरह के यथार्थवादी परिदृश्यों की कल्पना करते हैं जो एक कुंजी के रूप में एक कॉलम का उपयोग करके 90% संचालन के अनुरूप होंगे, और जहां सूचकांक जोड़ने से गतिरोध पैदा होगा?
सुपरकैट

@ सुपरफ़ास्ट मुझे यकीन नहीं है कि मैं आपकी खोज को पूरी तरह से समझता हूं। एक सक्रिय अनुप्रयोग के संदर्भ में, निष्पादन समय या आईओएस की संख्या में लगभग किसी भी वृद्धि ने गतिरोधों को पेश करने की क्षमता है। ... लेकिन, अधिकांश बिंदुओं तक, अधिकांश अनुप्रयोगों में एक सूचकांक की उपस्थिति या अनुपस्थिति तब तक नगण्य होती है जब तक कि डेटाबेस एक महत्वपूर्ण आकार और / या निर्णायक स्तर तक नहीं पहुंच जाता है। जैसे, जब आपके सभी इंडेक्स अब मेमोरी में फिट नहीं होते ...
svidgen

1
मुद्दा यह है, यह जानना कठिन है कि जब तक कि विशिष्ट उपयोग के मामले तनाव परीक्षण (या जब तक आप उत्पादन में अप्रत्याशित उपयोगकर्ता व्यवहार के साथ समस्याएँ नहीं देखते हैं) तक आपके क्वेरी मेकअप क्या हैं। यदि आपके पास एक पेज है जो टेबल x.fieldy की कुंजी है, लेकिन यह केवल हर हजार आवेषण के लिए एक बार हिट होता है ... तो सूचकांक में शुद्ध गिरावट हो सकती है।
svidgen

2

जब आपका आवेदन जारी होता है, तब तक बहुत देर हो चुकी होती है।

लेकिन किसी भी उचित विकास प्रक्रिया में प्रदर्शन परीक्षण शामिल होना चाहिए।

अपने परीक्षण परीक्षणों के परिणामों का उपयोग यह तय करने के लिए करें कि कौन से सूचकांक जोड़ने हैं, और प्रदर्शन परीक्षणों को दोहराकर उनकी प्रभावशीलता को सत्यापित करें।


जब कोई एप्लिकेशन रिलीज़ होता है, तो सूचकांकों को ट्विक करने का एक अच्छा समय होता है। इस साइट को देखें, stachexchange, आप अपनी टोपी को शर्त लगा सकते हैं कि लाइव होने के बाद सूचकांकों ने लंबे समय तक बदल दिया है।
लॉस मानस

@LosManos: स्टैक एक्सचेंज का उपयोग करने के लिए कोई भी भुगतान नहीं करता है।
ऑर्बिट में

@LightnessRacesinOrbit: हे गर्भनिरोधक, विज्ञापनदाता स्टैक एक्सचेंज का उपयोग करने के लिए भुगतान करते हैं।

@JonofAllTrades: अगर हमें कुछ घंटों के खराब प्रदर्शन की वजह से याद आ रहे सूचकांक की वजह से कोई परवाह नहीं है। मेरा कहना है कि एक बड़े, फ्री-टू-यूज़ कम्युनिटी-ओरिएंटेड वेबसाइट के साथ एक पेरिपचुअल डिस्ट्रीब्यूशन साइकल, समय-समय पर जारी, स्व-निहित वाणिज्यिक उत्पाद से बहुत अलग है। इस प्रकार, एसई एक अच्छा उदाहरण नहीं है।
को ऑर्बिट में लाइटनेस दौड़

1

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

यहाँ कुछ चीजें हैं जिन पर मैं विचार करूंगा:

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

अपनी प्रारंभिक समीक्षा के बाद, आपको इसे कुछ विचार के साथ पालन करना चाहिए, जब आपको इस बारे में फिर से समीक्षा करनी चाहिए और आप ऐसा करने के लिए जानकारी कैसे एकत्र कर सकते हैं (मॉनिटर उपयोग, क्लाइंट डेटा की प्रतियां प्राप्त करें, आदि)।

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


0

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

सामान्य तौर पर, मैं उन क्षेत्रों को अच्छी तरह से ट्यून करूँगा जो मुझे उम्मीद है कि उपयोगकर्ता सबसे पहले हिट करेंगे। तब मैं कुछ भी धुन करूँगा जो कि उपयोगकर्ता अनुभव के दृष्टिकोण से धीमी हो। जब भी उपयोगकर्ता को किसी चीज का इंतजार करना होता है, तो उन्हें एक बुरा अनुभव मिलता है और वह ठुकरा सकता है। अच्छा नही!


0

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

आपके द्वारा पूछे जाने वाले कुछ प्रश्न हैं:

  • प्रत्येक तालिका के आकार के लिए डिज़ाइन सीमाएं क्या होंगी?

यदि टेबल हमेशा छोटी होती हैं (कहते हैं <100 पंक्तियों), यह एक आपदा नहीं है अगर डेटाबेस को पूरी तालिका को स्कैन करना है। सूचकांक जोड़ना फायदेमंद हो सकता है, लेकिन इसे निर्धारित करने के लिए थोड़ी अधिक विशेषज्ञता या माप की आवश्यकता होती है।

  • प्रत्येक क्वेरी को कितनी बार चलाया जाएगा, और आवश्यक प्रतिक्रिया समय क्या है?

यदि क्वेरी बार-बार चलाई जाती है और उसके पास सख्त प्रतिक्रिया समय की आवश्यकताएं नहीं होती हैं (उदाहरण रिपोर्ट जनरेशन) और पंक्तियों की संख्या बहुत बड़ी नहीं होती है, तो यह संभवतः सूचकांकों को स्थगित करने के लिए काफी सुरक्षित है। फिर, विशेषज्ञता या माप यह बताने में मदद कर सकती है कि क्या यह फायदेमंद होने जा रहा है।

  • क्या क्वेरी को प्राथमिक कुंजी से अलग हटकर तालिका देखने की आवश्यकता है? जैसे दिनांक सीमा द्वारा फ़िल्टर करना, किसी विदेशी कुंजी पर जुड़ना?

यदि ये प्रश्न अक्सर चलते हैं और कई पंक्तियों के साथ तालिकाओं को स्पर्श करते हैं, तो आपको गंभीरता से एक सूचकांक जोड़ने पर विचार करना चाहिए। यदि आप सुनिश्चित नहीं हैं कि यह क्वेरी के लिए मामला है, तो आप डेटाबेस को वास्तविक मात्रा में डेटा के साथ पॉप्युलेट कर सकते हैं, फिर क्वेरी प्लान को देखें।

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