2010-07-21 15 views
41

मुझे यह जानने में दिलचस्पी है कि कौन सी तकनीक डेवलपर्स SQL ​​सर्वर में विशिष्टता को लागू करने के लिए उपयोग करना पसंद करते हैं: अद्वितीय कंसस्ट्रेंट या अद्वितीय INDEX। यह देखते हुए कि प्रत्येक के शारीरिक कार्यान्वयन में थोड़ा अंतर है, आप कैसे तय करते हैं कि सबसे अच्छा क्या है?अनोखा इंडेक्स बनाम अद्वितीय इंडेक्स

क्या सर्वोत्तम समाधान का मूल्यांकन करने के लिए प्रदर्शन के अलावा अन्य कारण हैं?

क्या एक या दूसरे के लिए डेटाबेस प्रबंधन फायदे हैं?

उत्तर

30

यह MSDN लेख दो की तुलना एसक्यूएल सर्वर 2000 के लिए है: http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

सबसे प्रयोजनों के लिए, वहाँ कोई अंतर नहीं है - बाधा कवर के तहत एक सूचकांक के रूप में कार्यान्वित किया जाता है। और यद्यपि बाधा को अक्षम करने की क्षमता है, लेकिन यह वास्तव में SQL सर्वर में काम नहीं करता है।

यह केवल तभी महत्वपूर्ण है जब आप FILLFACTOR, आदि जैसी चीज़ों को ट्विक करना चाहते हैं, जिस तरह से आप अद्वितीय बाधा को कार्यान्वित करना चाहते हैं।

एसक्यूएल सर्वर 2008+ INCLUDE जोड़ा गया ताकि अधिक कुशल कवरिंग इंडेक्स प्रदान किए जा सकें। फ़िल्टर किए गए इंडेक्स = पंक्तियों के उप-समूह पर अनन्य बाधा/एकाधिक नल इत्यादि को अनदेखा करें।

+2

जोड़ने के लिए किसी भी इंडेक्स में बाधा बदलना बंद कर देंगे। लेख अच्छा है। यह दिलचस्प है कि यह मेटा-डेटा के अलावा "कोई व्यावहारिक अंतर नहीं है" निष्कर्ष निकाला है। – bobs

+0

ट्यूट, एसक्यूएल सर्वर 2000 – gbn

+2

@gbn के लिए एमएसडीएन उद्धृत करना: सच है, लेकिन कुछ भी बदल गया है? –

26

वे not significantly different. हैं जब आप एक अद्वितीय बाधा उत्पन्न करते हैं, तो SQL सर्वर स्वचालित रूप से आपके लिए एक अद्वितीय अनुक्रमणिका बना देगा।

एक सूचकांक बनाने के लिए वाक्य रचना के साथ

, तो आप बेहतर नियंत्रण के लिए एक अनूठा सूचकांक को परिभाषित करने के लिए हो सकता/nonclustered क्लस्टर निर्दिष्ट करने के लिए, कॉलम, filegroup, सूचकांक फिल्टरिंग (SqlSvr2008), आदि

एक बाधा अधिकांश में पसंद किया जाता है शामिल मामलों क्योंकि यह विशिष्टता के इरादे को व्यक्त करता है: यह एक बाधा है। एक सूचकांक इस इरादे को व्यक्त नहीं करता है।

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

+1

+1 मैं स्थिरता भी कहूंगा, साथ ही आप एक इंडेक्स – gbn

1

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

2

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