2010-04-20 24 views
9

के बीच क्या अंतर है निम्नलिखित दो बयानों के बीच क्या अंतर है?एक अद्वितीय बाधा और एक अद्वितीय सूचकांक

alter table [dbo].[Demo] add constraint [UC_Demo_Code] unique ([Code]) 
go 
create unique nonclustered index [UK_Demo_Code] on [dbo].[Demo] ([NB_Code]) 
go 

क्या बाधा के पास विशिष्टता को लागू करने में मदद करने के लिए एक अनुक्रमणिका है, या प्रत्येक प्रविष्टि/अद्यतन पर एक टेबल स्कैन किया जाएगा?

+0

पूरी तरह से उत्तर के लिए http://dba.stackexchange.com/a/55139/6548 देखें। – Rory

उत्तर

9

"तार्किक" प्रभाव समान है - केवल अद्वितीय मान तालिका में लोड किए जा सकते हैं। (यह उल्लेखनीय है कि यदि स्तंभ शून्य है, तो NULL के साथ केवल 1 पंक्ति डाली जा सकती है।)

भौतिक प्रभाव समान है - तालिका पर एक अद्वितीय अनुक्रमणिका बनाई गई है। यह या तो क्लस्टर या nonclustered हो सकता है।

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

(यह 2005 के माध्यम से एसक्यूएल 7.0 के लिए सच है, और अगर 2008 में इसे बदल दिया तो मुझे आश्चर्य होगा)।

0

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

0

आप उनके बीच तुलना के लिए Unique Constraints and Unique Indexes देख सकते हैं।

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

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