প্রাথমিক কী এর পরিবর্তে কভারিং কলামগুলির সাথে একটি অনন্য নন-ক্লাস্টার্ড সূচক ব্যবহারের প্রভাব


12

আমরা একটি বড় টেবিল আছে [MyTable]যা বর্তমানে উভয় একটি আছে Primary Key, এবং একটি Unique Non Clustered Indexএকই কলামে ( [KeyColumn])। ইউ এনসি সূচীতে অতিরিক্ত কভারিং কলামও রয়েছে।

একই কলামগুলিতে পিকে এবং ইউনিক এনসি সূচক উভয়কেই অপ্রয়োজনীয় বলে মনে হচ্ছে, তাই আমি প্রাইমারি কী মুছে ফেলার এবং তার পরিবর্তে রেফারেন্সিয়াল ইন্টিগ্রিটির উদ্দেশ্যে ইউনিক নন ক্লাস্টারড ইনডেক্স ব্যবহার করার কথা ভাবছিলাম।

নোট করুন যে টেবিলটি সম্পূর্ণরূপে অন্য কলাম দ্বারা গুচ্ছ।

যেমন আমাদের আছে:

ALTER TABLE [MyTable]
    ADD CONSTRAINT [PK_MyTable] 
    PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO

এবং

CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex] 
    ON [MyTable] ([KeyColumn]) 
    INCLUDE ([Column1], [Column2])
GO

আমি যতদূর জানি, একটি প্রাথমিক কীতে কভারিং কলামগুলি যুক্ত করা সম্ভব নয়, তাই আমি করার ইচ্ছা করি:

  • নির্ভরশীল বিদেশী কী বাধাগুলি ফেলে দিন MyTable.KeyColumn
  • MyTable.KeyColumnসম্পূর্ণরূপে প্রাথমিক কীটি ফেলে দিন
  • সারণীতে বিদেশী কীগুলি পুনরায় যুক্ত করুন (যেমন আরআই এর মাধ্যমে কার্যকর করা হবে MyTable.KeyColumn)

এটি করার জন্য আমি কেবল ভাবতে পারি যে আমরা আমাদের ERD ডায়াগ্রামগুলিতে ভিজ্যুয়াল কী প্রতীকটি পাব না এবং অন্তর্ভুক্ত কলামগুলির কারণে (পাতাগুলি) সূচকের ঘনত্ব কম হবে।

আমি /programming/487314/primary-key-or-unique-index পড়েছি এবং এটি করার সততা এবং কার্য সম্পাদনের দিকগুলি নিয়ে খুশি।

আমার প্রশ্নটি: এই পদ্ধতির ত্রুটি কি?

আমি যেটি সম্পাদন করার চেষ্টা করছি তা সম্পাদনা করুন : পারফরম্যান্স অপটিমাইজেশন এবং স্প্রিং ক্লিনিং । পিকে বা একটি সূচক মুছে ফেলার মাধ্যমে, আমার সূচকগুলি = দ্রুত লেখার জন্য কম পৃষ্ঠাগুলির প্রয়োজন হবে, পাশাপাশি রক্ষণাবেক্ষণ / অপারেশনাল বেনিফিট, অর্থাত্‍ ডিগ্র্যাগড রাখার জন্য একটি কম সূচক ইত্যাদি there

এর কিছু পটভূমি রাখার জন্য, আমি আগে কখনও কোনও টেবিলটি পাই নি যা পিকে ছাড়া রেফারেন্স করা হচ্ছে। যাইহোক, কভারিং কলামগুলির সাথে একটি এনসি সূচি টেবিলের সাথে যুক্ত করা হয়েছিল তার অর্থ আমার চিন্তাভাবনাটি খাপ খাইয়ে নেওয়া দরকার।


আপনি যেটি সম্পাদন করতে চাইছেন সে সম্পর্কে আপনি মন্তব্য করতে পারেন? আপনারও নিশ্চিত হওয়া উচিত যে শেষ পর্যন্ত আপনি ক্লাস্টারড ইনডেক্সের সাথে শেষ করেছেন।

@ jn29098 - আপডেট হয়েছে। নিশ্চিত করা হয়েছে যে আমাদের কলামগুলিতে একটি ক্লাস্টার্ড সূচক রয়েছে যা পিকে বা প্রচ্ছদ কলামগুলি নয়, সুতরাং এটি এই সিদ্ধান্তের সাথে প্রাসঙ্গিক বলে মনে হয় না।
স্টুয়ার্টএলসি

1
আপনি নিশ্চিত হন যে আপনার কাছে এমন কোনও সরঞ্জাম / ওআরএম / ডেটা জেনারেশন মডেলিং সরঞ্জাম নেই যা পিকে চলে যাওয়ার সময় বাধা দেবে?
রিমাস রুসানু

কেবলমাত্র অসুবিধা আমি দেখতে পেলাম যে একবার পিকে চলে গেলে..এইপথে আপনার কীকলমনে একটি সূচক রয়েছে এবং যে প্রশ্নগুলি পিকে সূচক ব্যবহার করছে সেগুলি কী-কলাম বা সূচি অনুসারে কীঙ্কোলিউম অনুসারে সূচি স্ক্যান করার জন্য বলে এবং ইউনিকিউ সূচী দ্বারা আচ্ছাদিত নয় এমন কিছু অতিরিক্ত আইও ঘড়ি থাকতে পারে অনন্য সূচক পাতার পৃষ্ঠাগুলি পিকে-র চেয়ে অনেক বেশি। অন্যদিকে এটি দেখতে দুর্দান্ত fine তবে কিছু পিউরিস্টই বলবেন আপনার পিকে হওয়া উচিত :)
গুলি মেল

1
আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি সূচকের ব্যবহারের পরিসংখ্যান ডিএমভি ব্যবহার করে সেই সূচকের কার্যকারিতাটি পরীক্ষা করে দেখুন এবং এটি আপনার কিছু প্রশ্নের দ্বারা ব্যবহৃত হচ্ছে কিনা তা দেখুন the অনন্য কী কী সূচকগুলির বিরুদ্ধেও এটি পরীক্ষা করে দেখুন এবং তারপরে কোয়েরির কী হবে তা নির্ধারণ করুন de সূচি ..
গুলি মেল

উত্তর:


3

পারফরম্যান্স অপটিমাইজেশন। পিকে বা একটি সূচক মুছে ফেলার মাধ্যমে, আমার সূচকগুলি = দ্রুত লেখার জন্য কম পৃষ্ঠাগুলির প্রয়োজন হবে, পাশাপাশি রক্ষণাবেক্ষণ / অপারেশনাল বেনিফিট, অর্থাত্‍ ডিগ্র্যাগড রাখার জন্য একটি কম সূচক ইত্যাদি there

আপনাকে প্রমাণ করতে সক্ষম হতে হবে যে প্রস্তাবিতটি আসলে সহায়তা করবে (ব্যয় বনাম সুবিধা)। কোন কারণে এই পরিবর্তন বিবেচনা করা হচ্ছে? এই টেবিলটি নিয়ে আসলে পারফরম্যান্সের সমস্যা রয়েছে, নাকি এটি "ভুল দেখায়"?

এখানে আরও কিছু প্রশ্ন রয়েছে যা আপনাকে আপনার পরিবেশের জন্য সেরা সিদ্ধান্তে আসতে সহায়তা করবে:

  • রক্ষণাবেক্ষণ উইন্ডোতে কত সময় বাঁচানো হত? ব্যাকআপ উইন্ডোতে?

  • এতে স্টোরেজ স্পেসটি কতটা বাঁচবে (ডেটা ফাইল, লগ ফাইল, ব্যাকআপ ইত্যাদি)?

  • কি INSERTএই টেবিলের উপর কর্মক্ষমতা সত্যিই একটি বোতলের ডান এখন? এটি কতটা উন্নতি করবে? কোনও সূচি অপসারণ কি সেই সমস্যা সমাধানের সেরা কৌশল?

  • এটি কি ডাটাবেস সরঞ্জাম এবং ফ্রেমওয়ার্কগুলিতে (বিশেষত ওআরএম) সমস্যা তৈরি করে যা প্রতিটি টেবিলের কাছে একটি প্রাথমিক কী থাকবে এবং কেবল একটি অনন্য সূচক নয় বলে আশা করে? লেনদেনের প্রতিরূপ প্রকাশিত টেবিলগুলিতে একটি প্রাথমিক কী প্রয়োজন

  • একটি স্ব-ডকুমেন্টিং ডাটাবেস স্কিমা কি গুরুত্বপূর্ণ?

  • এর সীমিত ব্যবহার সত্ত্বেও, প্রাথমিক কী সূচকটির সংকীর্ণতা এখনও অপ্টিমাইজারকে নির্দিষ্ট প্রশ্নের জন্য আরও দক্ষ পরিকল্পনা তৈরি করতে দিচ্ছে? ( sys.dm_db_index_usage_statsএটি জানতে ব্যবহার করুন ))

ব্যক্তিগতভাবে বলতে গেলে, আপনি আমাদের যা বলেছেন তা থেকে আমি এটিকে একা রেখে যাব যতক্ষণ না এটি প্রমাণ করা যায় যে উভয় (ক) অতিরিক্ত সূচক একটি সমস্যা, এবং (খ) এটি অপসারণই সমাধান।


ধন্যবাদ - এটি দেখা গেছে যে সূচিগুলির পরিসংখ্যানগুলি দেখিয়েছিল যে পিকে এখনও স্ক্যানগুলির জন্য প্রচুর ব্যবহৃত হয়েছিল। দেখে মনে হচ্ছে আমি অত্যুদ্বেগ বোধ করছি - পিকে ধরে রাখার পঠনযোগ্যতা / কনভেনশন সুবিধাগুলি দীর্ঘমেয়াদে কোনও স্টোরেজ প্রভাবকে ছাড়িয়ে যেতে হবে। লেনদেনের প্রতিরূপ সম্পর্কে বিন্দু এটি যদিও এটি ছড়িয়ে দেয় - আমাদের শীঘ্রই এই ডাটাবেসটির অনুলিপি করা প্রয়োজন।
স্টুয়ার্টলসি

2

সেই টেবিলের একমাত্র প্রকারের ক্যোয়ারী যা আরও খারাপ (এবং কেবলমাত্র আরও খারাপ) সম্পাদন করবে তারা হ'ল কী কলাম স্তরের মানগুলির বিস্তৃত অনুরোধ করবে - কারণ এই মুহুর্তে সেই প্রশ্নগুলি আপনার পিকে জুড়ে একটি সূচী অনুসন্ধান দ্বারা সেরা পরিবেশন করা হবে।

এটি মনে রাখা উচিত যে এই টেবিলের জন্য উল্লেখযোগ্য টেবিলগুলির জন্য রেফারেন্সিয়াল অখণ্ডতা পরীক্ষার ব্যয়টি আরও বেশি হবে (আবার কেবলমাত্র কিছুটা বেশি)।

যতক্ষণ আপনি অযোগ্য দিকটির যত্ন নেবেন, ততক্ষণ আপনার এক সূচকের সাথে ঠিক থাকা উচিত।

যদি এটি আমার ডিবি হয় তবে আমি সম্ভবত একক অনন্য সূচকের জন্য যেতে চাইতাম, অন্য সমস্ত জিনিস সমান ছিল।


ধন্যবাদ - আপনার কোনও রেফারেন্স লিঙ্ক আছে? কিছুটা খারাপ, আপনি কি আচ্ছাদন সূচকগুলিতে কেবল নীচের সূচকের ঘনত্বের কথা উল্লেখ করছেন, বা অন্য কোনও কারণ রয়েছে যা এর কারণ হতে পারে?
স্টুয়ার্টএলসি

দুর্ভাগ্যক্রমে এটি অনেক অভিজ্ঞতা থেকে, এবং কয়েক বছরের তুলনায় আমার চেয়ে অনেক বেশি স্মার্ট লোকের সাথে চ্যাট করা! এবং হ্যাঁ, এটি অবিকল যে - প্রতি পৃষ্ঠায় কম সারি থাকবে, তাই আরও I / O থাকবে। তবে - এটি লক্ষণীয় যে INCLUDE কলামগুলি কেবল পাতার স্তরে উপস্থিত রয়েছে। সুতরাং এটি সব খারাপ নয়। আমি নিশ্চিত যে আপনার প্রশ্নের বিশদটির ভিত্তিতে আপনি এটি জানেন তবে আমি অনুমান করছি যে অন্য পাঠকরা এটি নাও করতে পারেন।
ম্যাট হুইটফিল্ড

-2

আমি যতদূর জানি, প্রাথমিক কীতে কভারিং কলাম যুক্ত করা সম্ভব নয়

যদি আপনার কী কলামে একটি ক্লাস্টার ইনডেক্স থাকে, তবে এটি যেহেতু এটি একটি ক্লাস্টার্ড সূচক, অন্য সমস্ত কলামগুলি সুস্পষ্টভাবে 'আচ্ছাদিত'। সুতরাং আপনি কী কলামে অন্য সূচি যুক্ত করে কোনও লাভ করবেন না। প্রকৃতপক্ষে আপনি আপনার সন্নিবেশগুলি আরও কমিয়ে দেবেন এবং আরও বেশি জায়গা ব্যবহার করবেন।

এটি কারণ কারণ একটি ক্লাস্টার্ড সূচকটি কোনও সূচক নয়, তবে কেবল সূচির ক্রমতে সারণির সারিগুলি সংরক্ষণ করার জন্য একটি নির্দেশ। এবং একবার আপনি প্রাথমিক কী দ্বারা একটি সারি অজস্র করে ফেলেন, তারপরে আপনার অন্য সমস্ত কলামগুলি ঠিক সেখানে থাকবে।


2
প্রথম অনুচ্ছেদ থেকে:The table is clustered by another column entirely.
জেএনকে

5
আমি মনে করি এখানে কিছু প্রাথমিক কী / গোষ্ঠী সূচক বিভ্রান্তি চলছে। আপনাকে মেনে নেওয়ার জন্য ম্যানেজমেন্ট স্টুডিওর সর্বোত্তম প্রচেষ্টা সত্ত্বেও, তারা একই জিনিস নয়।
ম্যাট হুইটফিল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.