यदि आपका डेटा अद्वितीय है, तो आपको एक UNIQUE
बनाना चाहिए उन पर अनुक्रमणिका।
इसका मतलब है कि कोई अतिरिक्त ओवरहेड नहीं है और कुछ मामलों में अनुकूलक के निर्णयों को प्रभावित करता है ताकि वह एक बेहतर एल्गोरिदम चुन सके।
SQL Server
में और PostgreSQL
. में , उदाहरण के लिए, यदि आप UNIQUE
. पर सॉर्ट करते हैं कुंजी, अनुकूलक ORDER BY
को अनदेखा करता है उसके बाद प्रयुक्त उपवाक्य (चूंकि वे अप्रासंगिक हैं), i. इ। यह प्रश्न:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
col_unique
. पर एक अनुक्रमणिका का उपयोग करेगा और other_col
. पर क्रमित नहीं होगा क्योंकि यह बेकार है।
यह प्रश्न:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
एक INNER JOIN
. में भी बदल दिया जाएगा (SEMI JOIN
के विपरीत) ) अगर कोई UNIQUE
है othertable.othercol
. पर अनुक्रमणिका ।
अनुक्रमणिका में हमेशा पंक्ति के लिए किसी प्रकार का सूचक होता है (ctid
में PostgreSQL
, पंक्ति सूचक MyISAM
. में , प्राथमिक कुंजी/अद्वितीय InnoDB
. में ) और इन पॉइंटर्स पर पत्तियों का आदेश दिया जाता है, इसलिए वास्तव में प्रत्येक इंडेक्स लीफ अद्वितीय है (हालांकि यह स्पष्ट नहीं हो सकता है)।
प्रदर्शन विवरण के लिए मेरे ब्लॉग में यह लेख देखें: