ইসডিলেট (নরম মুছে ফেলা) প্রয়োগ করতে বাধ্য করা হলে উপযুক্ত সূচক আর্কিটেকচারটি কী?


17

বর্তমানে, আমাদের একটি বিদ্যমান ডাটাবেস এবং অ্যাপ্লিকেশন রয়েছে যা পুরোপুরি কার্যকর হয়। আমার এই সময়ে আর্কিটেকচার পরিবর্তন করার ক্ষমতা নেই। আজ, ডাটাবেসের প্রতিটি টেবিলের একটি "ইসডিল্টেড" নট বিট ক্ষেত্র নেই '0' এর ডিফল্ট সহ। অ্যাপ্লিকেশনটি "মুছে ফেলা" ডেটা দিলে, এটি কেবল ইসডিলটেড পতাকাটিকে 1 এ আপডেট করে।

আমার যে সমস্যা বুঝতে সমস্যা হচ্ছে তা হ'ল প্রতিটি টেবিলের সূচকগুলি কীভাবে কাঠামোযুক্ত করা উচিত। এখনই, প্রতিটি ক্যোয়ারী / যোগদান / ইত্যাদি সর্বদা ইসডিলিট করা চেকটি প্রয়োগ করে। এটি এমন একটি মান যা আমাদের বিকাশকারীদের অবশ্যই অনুসরণ করা উচিত। বলা হচ্ছে, আমি নির্ধারণ করার চেষ্টা করছি যে প্রতিটি টেবিলের আমার ক্লাস্টারযুক্ত প্রাথমিক কী সূচিগুলিকে প্রাথমিক কী এবং ইসডিলিট বিট ক্ষেত্র অন্তর্ভুক্ত করার জন্য পরিবর্তন করা দরকার কিনা। এছাড়াও, যেহেতু প্রত্যেকটি ক্যোয়ারী / যোগদান / ইত্যাদি। আইসডিলেটেড চেকটি প্রয়োগ করতে হবে, এটি কি যথাযথ অনুমান যে প্রতিটি সিঙ্গল ইন্ডেক্স (সেইসাথে ক্লাস্টারযুক্ত নয়) ইএসডিলেটেড ক্ষেত্রকেও সূচকের প্রথম ক্ষেত্র হিসাবে অন্তর্ভুক্ত করা উচিত?

আমার অন্য একটি প্রশ্ন ফিল্টার সূচকগুলি প্রায়। আমি বুঝতে পারি যে আমি সূচকগুলির আকার হ্রাস করতে "WHERE IsDeleted = 0" এর মতো সূচীতে ফিল্টার রাখতে পারি। তবে যেহেতু প্রতিটি যোগদান / ক্যোয়ারিতে আইসডিলেটেড চেকটি প্রয়োগ করতে হবে, তা কি ফিল্টারড সূচকটি ব্যবহার করা থেকে বিরত রাখবে (যেহেতু আইসডিলেটেড কলাম যোগ / কোয়েরিতে ব্যবহৃত হয়)?

মনে রাখবেন, ইসডিলটেড পদ্ধতির পরিবর্তন করার ক্ষমতা আমার নেই।

উত্তর:


13

এখানে সবচেয়ে সহজ পদ্ধিতি হ'ল আপনার কী এবং ক্লাস্টারযুক্ত সূচিগুলি একা রেখে যাওয়া এবং আপনার ক্লাস্টারযুক্ত সূচীগুলির জন্য ফিল্টারড সূচকগুলি ব্যবহার করা।

অতিরিক্তভাবে আপনি প্রাথমিক কী এবং অনন্য সূচকগুলি পার্টিশনবিহীন রেখে পার্টিশনযুক্ত হিপস বা পার্টিশনযুক্ত ক্লাস্টারড-কলামস্টোরগুলিতে (এসকিউএল সার্ভার 2016+) কিছু বড় টেবিল স্থানান্তর করতে পারেন। এটি আপনাকে ইসডিলেটেড সারিগুলির জন্য নন-কী কলামগুলি পৃথক ডেটা কাঠামোর দিকে ঠেলে দিতে সক্ষম করবে, যা অতিরিক্তভাবে আলাদাভাবে সংকুচিত হতে পারে বা একটি আলাদা ফাইলগ্রুপে সংরক্ষণ করা যেতে পারে।

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

ই জি

SELECT ... WHERE ... AND IsDeleted=0

এবং না:

SELECT ... WHERE ... AND IsDeleted=@IsDeleted

একটি প্যারামিটার ব্যবহার ফিল্টারড সূচকের ব্যবহারকে প্রতিরোধ করবে এবং প্যারামিটার সান্ফিংয়ের মাধ্যমে আপনাকে সমস্যায় ফেলতে পারে।


IsDeletedশারীরিক স্টোরেজ নির্বিশেষে কলামটির সর্বব্যাপীতা এবং গুরুত্ব দেওয়া , প্যারামিটারাইজেশন ইস্যু দুটোই সমাধান করা এবং ডেটা অ্যাক্সেস করার ক্ষেত্রে ভুল করা, উভয় দৃষ্টিভঙ্গির মাধ্যমে (বৈকল্পিকভাবে বিভিন্ন স্কিমায়) ডেটা প্রকাশ করা বোধগম্য হবে অ্যাক্সেস কম সম্ভাব্য। বেস ডেটা অ্যাক্সেস কেবল বিরল ক্ষেত্রেই প্রাসঙ্গিক যেখানে মুছে ফেলা এবং অ-মোছা ডেটা একসাথে একত্রিত করা দরকার এবং যখন সারিগুলি আসলে "মুছে ফেলা" তে পরিবর্তন করা দরকার।
জেরোইন মোস্টার্ট

@ জিরোয়নমাস্টার্ট ভাল পরামর্শ। আরএলএসও এখানে ব্যবহার করা যেতে পারে, বা ইএফ কোর গ্লোবাল ক্যোয়ারি ফিল্টারগুলির মতো কিছু। ডকস.মাইক্রোসফট.ইন.সুফ
ডেভিড ব্রাউন - মাইক্রোসফ্ট

9

এটি একটি অপ্রিয় মতামত হতে পারে, তবে আমি মনে করি না "সর্বত্র এটি করুন" / একটি আকার আপনার প্রশ্নের সমস্ত উত্তর ফিট করে।

আপনার যদি এমন কোয়েরি রয়েছে যা অকারণে প্রচুর ইসডিলেটেড সারি স্ক্যান করছে, এর একটি সমাধান হ'ল সেই ক্যোয়ারীটিকে সন্তুষ্ট করার জন্য একটি ফিল্টারড, নন-ক্লাস্টারড ইনডেক্স তৈরি করা।

অন্য বিকল্পটি হ'ল এমন একটি সূচকযুক্ত ভিউ তৈরি করা যা বিভিন্ন প্রশ্নের দ্বারা বেশিরভাগ উপায়ে নেওয়া যেতে পারে, যা কেবল অ-মোছা সারিগুলিতে ফিল্টার করা হয়। এটি এন্টারপ্রাইজ সংস্করণে বিশেষত কার্যকর হতে পারে, যেখানে কোনও NOEXPANDইঙ্গিত সরবরাহ না করে স্বয়ংক্রিয় সূচকযুক্ত ভিউয়ের মিল রয়েছে ।

ছোট টেবিল বা টেবিলগুলি যেগুলি খুব বেশি পড়া হয়, ফিল্টার করা নন-ক্ল্লাস্টারড ইনডেক্স বা ভিউ বা কোনও কিছু যুক্ত করা সত্যিই আপনার ডেটাবেজে অপ্রয়োজনীয় ওভারহেড যুক্ত হতে পারে।


2

যুক্তিসঙ্গত অনুমানের অধীনে যে মুছে ফেলা খুব বিরল, সূচকে কোনও পরিবর্তনই উপযুক্ত সমাধান নয়।

আমি খুঁজে পেয়েছি যে খুব শীঘ্রই বা মুছে ফেলা সারিগুলির রেফারেন্সের জন্য অবশ্যই জিজ্ঞাসা করা উচিত এবং সূচকগুলিতে থাকা সারিগুলি হঠাৎ এটির জন্য খুব মূল্যবান।

দয়া করে নোট করুন যে আপনি যতক্ষণ না ভিউ ব্যবহার করছেন ততক্ষণ আপনাকে ফিল্টারগুলি অন্তর্ভুক্ত করতে আপনার সমস্ত প্রশ্নের সম্পাদনা করতে হবে।


0

আমি এমন একটি সিস্টেম দেখেছি যেখানে IS_DELETED পতাকাটি 0 বা PK এর মান। অন্যান্য সিস্টেমে এটি পিকে নেতিবাচক ছিল।

যেহেতু বেশিরভাগ অনুসন্ধানগুলি "প্রাকৃতিক" বা ব্যবসায় (কখনও কখনও বহু-ক্ষেত্র) কী দ্বারা মানগুলি পুনরুদ্ধার করে, তারা যোগদান না করে পিকে দিয়ে কখনও জিজ্ঞাসাবাদ করেনি; তবে তারা সর্বদা মূল টেবিলের জন্য এবং যে কোনও যুক্ত টেবিলের জন্য একটি এন্ড IS_DELETED = 0 যুক্ত করেছিল।

এই সিস্টেমে প্রতিটি লেনদেনের সারণীর জন্য একটি অডিট টেবিলও রয়েছে যা পরিবর্তনগুলি ট্র্যাক করে; এবং অ্যাপ্লিকেশনটিতে মুছে ফেলা ডেটা সহ সমস্ত ডেটা পরিবর্তনগুলি প্রদর্শন করার বৈশিষ্ট্য ছিল।


0

আশা করি আপনার কাছে ক্যোয়ারী পরিবর্তন করার অধিকার এবং ক্ষমতা রয়েছে।

তবে যেহেতু প্রতিটি যোগদান / ক্যোয়ারিতে আইসডিলেটেড চেকটি প্রয়োগ করতে হবে, তা কি ফিল্টারড সূচকটি ব্যবহার করা থেকে বিরত রাখবে (যেহেতু আইসডিলেটেড কলাম যোগ / কোয়েরিতে ব্যবহৃত হয়)?

আমি একটি গুরুত্বপূর্ণ বিষয় বলতে চাই, আশা করি আমি এটি ব্যাখ্যা করতে সক্ষম হয়েছি।

জটিল কোয়েরিতে কোথায় Transaction tableএবং Masterসারণী উভয়ই ব্যবহৃত হয়।

IsDeleted=0কেবল Transactionটেবিলে ব্যবহার করুন । Masterটেবিল ব্যবহার করবেন না ।

উদাহরণ,

Select * from dbo.Order O
inner join dbo.category C on o.categoryid=o.categoryid
inner join dbo.Product P on P.Productid=o.Productid
where o.isdeleted=0

c.isdeleted=0( Categoryটেবিল ব্যবহার করে ) এর কোনও অর্থ নেই t এটি অপ্রয়োজনীয়।

তেমনি ব্যবহারেও P.isdeleted=0কি কোন লাভ আছে ?

কারণ আমি সমস্ত মুছে ফেলা অর্ডার এবং তাদের বিশদ চাই।

কিভাবে করতে Productযখন মুছে যাবে Orderহয় Activeবা যেখানেই Productidরেফারেন্স।

সুতরাং আপনি যদি গুরুত্বপূর্ণ ক্যোয়ারিতে সাবধানতার সাথে ডিবাগ করেন, তবে আপনি কিছু ====================================================================================================================================================================================================================== 0

অন্ধভাবে ফিল্টারড সূচক তৈরি করবেন না, প্রথমে খুব গুরুত্বপূর্ণ এবং ধীর অনুসন্ধানগুলি বেছে নিন।

এই ধীর ক্যোরিয়াকে অনুকূলিত করুন তবে কেবল ফিল্টারড সূচক বা টিউন সূচক সম্পর্কে সিদ্ধান্ত নিন Ind

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.