यह मुख्य रूप से तब मायने रखता है जब समग्र अनुक्रमणिका के साथ प्रयोग किया जाता है:
CREATE INDEX ix_index ON mytable (col1, col2 DESC);
दोनों के लिए इस्तेमाल किया जा सकता है:
SELECT *
FROM mytable
ORDER BY
col1, col2 DESC
या:
SELECT *
FROM mytable
ORDER BY
col1 DESC, col2
, लेकिन इसके लिए नहीं:
SELECT *
FROM mytable
ORDER BY
col1, col2
एक कॉलम पर एक इंडेक्स को दोनों तरीकों से क्रमबद्ध करने के लिए कुशलतापूर्वक उपयोग किया जा सकता है।
विवरण के लिए मेरे ब्लॉग में लेख देखें:
- अवरोही अनुक्रमणिका
अपडेट करें:
वास्तव में, यह एकल स्तंभ अनुक्रमणिका के लिए भी महत्वपूर्ण हो सकता है, हालांकि यह इतना स्पष्ट नहीं है।
क्लस्टर टेबल के कॉलम पर एक इंडेक्स की कल्पना करें:
CREATE TABLE mytable (
pk INT NOT NULL PRIMARY KEY,
col1 INT NOT NULL
)
CREATE INDEX ix_mytable_col1 ON mytable (col1)
col1
. पर अनुक्रमणिका col1
. के आदेशित मान रखता है पंक्तियों के संदर्भ के साथ।
चूंकि तालिका को क्लस्टर किया गया है, पंक्तियों के संदर्भ वास्तव में pk
. के मान हैं . उन्हें col1
. के प्रत्येक मान के भीतर भी ऑर्डर किया जाता है ।
इसका मतलब यह है कि इंडेक्स के पत्ते वास्तव में (col1, pk)
. पर ऑर्डर किए जाते हैं , और यह प्रश्न:
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk
छँटाई की आवश्यकता नहीं है।
यदि हम निम्नलिखित के रूप में अनुक्रमणिका बनाते हैं:
CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)
, फिर col1
. के मान अवरोही क्रम में क्रमबद्ध किया जाएगा, लेकिन pk
. के मान col1
. के प्रत्येक मान के भीतर आरोही क्रम में लगाया जाएगा।
इसका मतलब है कि निम्नलिखित क्वेरी:
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk DESC
ix_mytable_col1_desc
. द्वारा परोसा जा सकता है लेकिन ix_mytable_col1
. द्वारा नहीं ।
दूसरे शब्दों में, जो कॉलम CLUSTERED INDEX
. बनाते हैं किसी भी टेबल पर हमेशा उस टेबल पर किसी अन्य इंडेक्स के पीछे वाले कॉलम होते हैं।