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