সম্মিলিত সূচকগুলির সাথে ব্যবহৃত হলে এটি মূলত গুরুত্বপূর্ণ:
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
কোনও কলামে কলামগুলি অবিচ্ছিন্ন থাকে সেই টেবিলে সর্বদা অন্য সূচকের পিছনে থাকা কলামগুলি থাকে are