एक कुंजी सिर्फ एक सामान्य सूचकांक है। सरलीकरण का एक तरीका यह है कि इसे किसी पुस्तकालय में कार्ड कैटलॉग की तरह सोचा जाए। यह MySQL को सही दिशा में इंगित करता है।
बेहतर खोज गति के लिए एक अद्वितीय कुंजी का भी उपयोग किया जाता है, लेकिन इसमें बाधा है कि कोई डुप्लिकेट आइटम नहीं हो सकता है (कोई दो x और y नहीं हैं जहां x y और x ==y नहीं है)।
मैनुअल इसे इस प्रकार समझाता है:
<ब्लॉकक्वॉट>एक अद्वितीय सूचकांक एक बाधा उत्पन्न करता है जैसे कि सूचकांक में सभी मान अलग-अलग होने चाहिए। एक त्रुटि उत्पन्न होती है यदि आप एक मौजूदा पंक्ति से मेल खाने वाले akey मान के साथ एक नई पंक्ति जोड़ने का प्रयास करते हैं। यह बाधा BDB स्टोरेज इंजन को छोड़कर NULL मानों पर लागू नहीं होती है। अन्य इंजनों के लिए, UNIQUE अनुक्रमणिका उन स्तंभों के लिए कई NULL मानों की अनुमति देती है जिनमें NULL हो सकता है। यदि आप किसी UNIQUE अनुक्रमणिका में किसी स्तंभ के लिए उपसर्ग मान निर्दिष्ट करते हैं, तो स्तंभ मान उपसर्ग के भीतर अद्वितीय होना चाहिए।
प्राथमिक कुंजी एक 'विशेष' अद्वितीय कुंजी है। यह मूल रूप से एक अद्वितीय कुंजी है, सिवाय इसके कि इसका उपयोग किसी चीज़ की पहचान करने के लिए किया जाता है।
मैनुअल बताता है कि सामान्य रूप से इंडेक्स का उपयोग कैसे किया जाता है:यहां।
MSSQL में, अवधारणाएँ समान हैं। अनुक्रमणिका, अद्वितीय बाधाएँ और प्राथमिक कुंजियाँ हैं।
परीक्षण नहीं किया गया, लेकिन मेरा मानना है कि MSSQL समकक्ष है:
CREATE TABLE tmp (
id int NOT NULL PRIMARY KEY IDENTITY,
uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
name varchar(255) NOT NULL,
tag int NOT NULL DEFAULT 0,
description varchar(255),
);
CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);
संपादित करें:ऊपर दिए गए कोड को सही होने के लिए परीक्षण किया गया है; हालांकि, मुझे संदेह है कि ऐसा करने के लिए एक बेहतर वाक्यविन्यास है। जब से मैंने SQL सर्वर का उपयोग किया है, तब से कुछ समय हो गया है, और जाहिर तौर पर मैं काफी कुछ भूल गया हूँ :)।