প্রধান বিবেচনা
আমি স্তূপগুলির জন্য একটি গুরুত্বপূর্ণ সুবিধা এবং একটি ক্লাস্টার্ড টেবিলগুলির জন্য দেখছি, তৃতীয় বিবেচনা যা কোনওভাবেই যেতে পারে।
একটি গাদা আপনাকে ইন্ডিয়ারেশনের একটি স্তর বাঁচায়। সূচকগুলিতে ডিস্কের স্থানে সরাসরি (ভাল, আসলে নয়, তবে সম্ভবত সরাসরি) পয়েন্ট করা সারি আইডি থাকে। সুতরাং, একটি স্তূপের বিপরীতে একটি সূচক অনুসন্ধানের জন্য ক্লাস্টার টেবিলের বিপরীতে প্রায় অর্ধেক ক্লাস্টারযুক্ত সূচকের জন্য ব্যয় করা উচিত।
একটি ক্লাস্টারড ইনডেক্স বাছাই করা হয়, প্রতি সে, একটি (প্রায়) ফ্রি ইনডেক্সের জন্য ধন্যবাদ। যেহেতু ক্লাস্টারিং সূচকটি ডেটার দৈহিক ক্রমে প্রতিবিম্বিত হয়, এটি আসল তথ্যগুলির উপরে নিজে তুলনামূলকভাবে সামান্য স্থান নেয়, অবশ্যই আপনাকে কোনভাবেই সংরক্ষণ করতে হবে। এটি শারীরিকভাবে অর্ডার করার কারণে, এই সূচকের বিপরীতে একটি পরিসীমা স্ক্যান শুরু পয়েন্টটি সন্ধান করতে পারে এবং তারপরে খুব দক্ষতার সাথে শেষ পয়েন্টটিতে জিপ করতে পারে।
হিপস রেফারেন্স RIDs এর সূচকগুলি, যা b৪ বিট। উল্লিখিত হিসাবে, ক্লাস্টারযুক্ত টেবিলের অ-ক্লাস্টারযুক্ত সূচকগুলি ক্লাস্টারিং কীটি উল্লেখ করে, যা ছোট (32-বিট INT
), একই (64-বিট BIGINT
), বা বড় (48-বিট DATETIME2()
প্লাস 32-বিট INT
, বা একটি 128-বিট জিইউইডি)। স্পষ্টতই বৃহত্তর এবং আরও ব্যয়বহুল সূচকগুলির জন্য আরও বিস্তৃত রেফারেন্স তৈরি করে।
স্থান প্রয়োজনীয়তা
এই দুটি টেবিল সহ:
CREATE TABLE TmpClustered
(
ID1 INT NOT NULL,
ID2 INT NOT NULL
)
ALTER TABLE TmpClustered ADD CONSTRAINT PK_Tmp1 PRIMARY KEY CLUSTERED (ID1)
CREATE UNIQUE INDEX UQ_Tmp1 ON TmpClustered (ID2)
CREATE TABLE TmpNonClustered
(
ID1 INT NOT NULL,
ID2 INT NOT NULL
)
ALTER TABLE TmpNonClustered ADD CONSTRAINT PK_Tmp2 PRIMARY KEY NONCLUSTERED (ID1)
CREATE UNIQUE INDEX UQ_Tmp2 ON TmpNonClustered (ID2)
... প্রতিটি 8.7 এম রেকর্ড সহ জনবহুল, উভয়ের জন্য ডেটার জন্য প্রয়োজনীয় স্থানটি ছিল 150 এমবি; ক্লাস্টার্ড টেবিলের সূচকগুলির জন্য 120 এমবি, ক্লাস্টারযুক্ত টেবিলের সূচকগুলির জন্য 310 এমবি MB এটি প্রতিফলিত করে যে গোষ্ঠী সূচকটি একটি আরআইডি থেকে সংকীর্ণ এবং ক্লাস্টারিং সূচকটি বেশিরভাগ ক্ষেত্রে একটি "ফ্রিবি"। অনন্য সূচকগুলি ছাড়া ID2
, সূচক স্থানটি নন-ক্লাস্টারযুক্ত টেবিলের জন্য 155 এমবি নেমে যেতে হবে (অর্ধেক, আপনি যেমনটি আশা করেছিলেন) তবে ক্লাস্টারড পিকে জন্য কেবল 150 কেবি - কিছুই নেই close
সুতরাং একটি ক্লাস্টার টেবিলের একটি 32-বিট ক্ষেত্রের 32-বিট ক্ষেত্রের একটি নন-ক্লাস্টারড সূচকটি 32-বিট সূচক (মোট 64 বিট, নামমাত্র) 120 এমবি নিয়েছে, যখন একটি ap৪-বিটের ক্ষেত্রের একটি 32২-বিট ক্ষেত্রের সূচক index আরআইডি (মোট 96৯ বিট, নামমাত্র) ১৫৫ এমবি নিয়েছে, ৫০% বৃদ্ধিের তুলনায় একটু কম, একজন নির্লজ্জভাবে -৪-বিট থেকে ৯ 96-বিট কীগুলিতে যাবেন বলে আশাবাদী, তবে অবশ্যই ওভারহেড রয়েছে যা আকারের কার্যকর পার্থক্যকে হ্রাস করে।
দুটি টেবিলের জনসংখ্যা এবং তাদের সূচকগুলি তৈরি করা প্রতিটি টেবিলের জন্য একই পরিমাণে সময় নেয়। স্ক্যানগুলি বা সন্ধানের সাথে জড়িত সাধারণ পরীক্ষা চালানো, আমি টেবিলগুলির মধ্যে কোনও বস্তুগত পারফরম্যান্সের পার্থক্য পাই না, যা মাইক্রোসফ্ট হোয়াইট পেপারের সাথে মেলে যা জিবিএন সাহায্যে লিঙ্কযুক্ত। সাইড পেপার উচ্চতর একত্রে অ্যাক্সেসের জন্য উল্লেখযোগ্য পার্থক্য দেখায়; কেন এমনটি হয় তা সম্পর্কে আমি নিশ্চিত নই, আশা করি উচ্চ-ভলিউম ওয়ালটিপি সিস্টেমগুলির সাথে আমার চেয়ে বেশি অভিজ্ঞ কেউ আমাদের বলতে পারেন can
এলোমেলো পরিবর্তনশীল-দৈর্ঘ্যের ডেটা ~ 40 বাইট যুক্ত করার সাথে এই সমতাটি প্রশংসনীয়ভাবে পরিবর্তন হয়নি change INT
এর প্রশস্ত ইউআইডিগুলির সাথে প্রতিস্থাপন করা হয় নি (প্রতিটি টেবিল প্রায় একই পরিমাণে ধীর হয়ে গেছে)। আপনার মাইলেজটি ভিন্ন হতে পারে, তবে বেশিরভাগ ক্ষেত্রে কোনও সূচক পাওয়া যায় কিনা তা কোন ধরণের চেয়ে গুরুত্বপূর্ণ।
বিট এবং টুকরা
একটি ক্লাস্টারবিহীন সূচকের বিরুদ্ধে একটি পরিসীমা স্ক্যান করা - কারণ টেবিলটি হিপ বা সূচকটি ক্লাস্টারড সূচক নয় - সূচিটি স্ক্যান করা এবং তারপরে প্রতিটি হিটের জন্য টেবিলের বিপরীতে নজর রাখা জড়িত। এটি খুব ব্যয়বহুল হতে পারে, তাই এটি কেবল কখনও টেবিল স্ক্যান করার জন্য সস্তা। তবে আপনি একটি প্রচ্ছদ সূচক দিয়ে এটিকে ঘিরে কাজ করতে পারেন। আপনি আপনার টেবিল ক্লাস্টার করেছেন কিনা তা এটি প্রয়োগ করে।
@ জিবিএন যেমন উল্লেখ করেছে, একটি গাদা সংযোগের সহজ উপায় নেই simple তবে, যদি আপনার টেবিলটি ধীরে ধীরে সময়ের সাথে বাড়তে থাকে - খুব সাধারণ ক্ষেত্রে - তবে মুছে ফেলার মাধ্যমে খালি স্থানটি নতুন ডেটা দ্বারা পূরণ করা হওয়ায় সামান্য বর্জ্য হবে।
আমি দেখেছি হিপ বনাম ক্লাস্টার টেবিল আলোচনার বেশ কয়েকটি কৌতূহলী স্ট্রোম্যান যুক্তি তৈরি করে যে সূচি ছাড়াই একটি গাদা একটি ক্লাস্টার্ড টেবিলের চেয়ে নিকৃষ্ট, এটিতে সর্বদা একটি টেবিল স্ক্যান প্রয়োজন। এটি অবশ্যই সত্য, তবে আরও অর্থবহ তুলনা হ'ল "বৃহত সু-সূচকযুক্ত ক্লাস্টার টেবিল" বনাম "বৃহত্তর ভাল-সূচকযুক্ত গাদা"। যদি আপনার টেবিলটি খুব ছোট হয় বা আপনি সর্বদা টেবিল স্ক্যান করতে চলেছেন তবে আপনি এটি ক্লাস্টার করেন বা না করেন তা কিছু যায় আসে না।
যেহেতু একটি ক্লাস্টার টেবিলের প্রতিটি সূচি ক্লাস্টারিং সূচকে উল্লেখ করে, তারা কার্যকরভাবে সমস্ত কভারিং সূচকগুলি। একটি সূচকযুক্ত কলাম এবং ক্লাস্টারিং কলাম (গুলি) উল্লেখ করে এমন কোনও কোয়েরি কোনও টেবিলের অনুসন্ধান ছাড়াই একটি সূচক স্ক্যান করতে পারে। আপনার ক্লাস্টারিং সূচকটি যদি সিন্থেটিক কী হয় তবে এটি সাধারণত মূল্যবান নয়, তবে যদি এটি কোনও ব্যবসায়িক কী হয় যা আপনাকে যে কোনও উপায়ে পুনরুদ্ধার করতে হবে তবে এটি একটি দুর্দান্ত বৈশিষ্ট্য।
টি এল; ডিআর
আমি ডেটা গুদামজাতকারী লোক, কোনও ওলটিপি বিশেষজ্ঞ নই। প্রকৃত সারণীগুলির জন্য আমি প্রায় সর্বদা মাঠে একটি ক্লাস্টারিং সূচক ব্যবহার করি যা বেশিরভাগ ক্ষেত্রে রেঞ্জ স্ক্যানের প্রয়োজন হয় সাধারণত সাধারণত একটি তারিখের ক্ষেত্র। মাত্রা সারণীর জন্য আমি পিকে ক্লাস্টার করি যাতে এটি সংযুক্তির জন্য প্রস্তাবিত ফ্যাক্ট টেবিলের সাথে যোগ দেয়।
ক্লাস্টারিং সূচকগুলি ব্যবহার করার বিভিন্ন কারণ রয়েছে, তবে যদি সেগুলির কোনওটিই প্রয়োগ না করে তবে ওভারহেড সার্থক নাও হতে পারে। আমি সন্দেহ করি যে সার্বজনীনভাবে ক্লাস্টারড ইনডেক্সগুলি ব্যবহার করে লোকদের পিছনে "আমরা সর্বদা এটি করেছি" এবং "এটি কেবল সেরা অনুশীলন" there's আপনার ডেটা এবং আপনার বোঝা উভয় দিয়ে চেষ্টা করুন এবং দেখুন কি ভাল কাজ করে।