কীভাবে বৃহত সূচকগুলি অন্তর্ভুক্ত ক্ষেত্রগুলি সিস্টেমের কার্য সম্পাদনকে প্রভাবিত করবে?


15

এই প্রশ্নটি এসকিউএল সার্ভার সূচকগুলির কার্যকারিতা সম্পর্কে একটি কভারিং সূচক varchar(2000)হিসাবে একটি হিসাবে INCLUDE

আমি ধীর এবং অস্থির ডেটাবেস অ্যাপ্লিকেশনটিতে কর্মক্ষমতা উন্নত করার চেষ্টা করছি। কিছু কিছু ক্ষেত্রে, ডাটা মত multple স্ট্রিং অপারেশন সহ প্রশ্নের দিয়ে বড় varchar স্ট্রিং মাধ্যমে অ্যাক্সেস করা হয়, SUBSTRING(), SPACE(), এবং DATALENGTH()। এখানে অ্যাক্সেসের সরলীকৃত উদাহরণ রয়েছে;

update fattable set col3 =  
   SUBSTRING(col3,1,10) + '*' + 
   SUBSTRING(col3,12,DATALENGTH(col3)-12)
from fattable where substring(col3,10,1) = 'A' and col2 = 2

স্কিমাটি দেখতে এরকম দেখাচ্ছে:

CREATE TABLE [dbo].[FatTable]( 
    [id] [bigint] IDENTITY(1,1) NOT NULL, 
    [col1] [nchar](12) NOT NULL, 
    [col2] [int] NOT NULL, 
    [col3] [varchar](2000) NOT NULL, ... 

বৃহত পাঠ্য কলামে একটি আচ্ছাদন ক্ষেত্র সহ নিম্নলিখিত সূচকটি সংজ্ঞায়িত করা হয়েছে।

CREATE NONCLUSTERED INDEX [IndexCol2Col3] ON [dbo].[FatTable]  ( [col2] ASC ) 
    INCLUDE( [col3] )

আমি যা পড়েছি তা থেকে কোনও সূচকে বড় ডেটা ক্ষেত্র স্থাপন করা খারাপ। আমি http://msdn.microsoft.com/en-us/library/ms190806.aspx সহ বেশ কয়েকটি নিবন্ধ পড়ছি যা সূচকের কার্য সম্পাদনে পেজিং এবং ডিস্ক আকারের প্রভাব নিয়ে আলোচনা করে। এটি বলা হচ্ছে, ক্যোয়ারী প্ল্যান অবশ্যই প্রচ্ছদ সূচকটি ব্যবহার করে। সিস্টেম লোডের ক্ষেত্রে এটি আসলে আমার কতটা ব্যয় করে তা নির্ধারণ করার মতো পর্যাপ্ত তথ্য আমার কাছে নেই। আমি জানি যে সামগ্রিকভাবে, সিস্টেমটি খারাপভাবে পারফর্ম করছে এবং আমি উদ্বিগ্ন যে এটি একটি বিষয়। প্রশ্নাবলী:

  • এই varchar(2000)কলামটি সূচীতে স্থাপন করা INCLUDEকি কোনও ভাল ধারণা?

  • INCLUDEক্ষেত্রগুলি যেহেতু পাতা নোডে সংরক্ষিত রয়েছে, তাই তাদের কি খুব বেশি প্রভাবের সূচকের কার্যকারিতা রয়েছে?

আপডেট: চমৎকার জবাবের জন্য ধন্যবাদ! এটি কিছু উপায়ে একটি অন্যায্য প্রশ্ন - যেমন আপনি বলছেন, আসল পরিসংখ্যান এবং প্রোফাইল দেওয়া ছাড়া কোনও সঠিক সঠিক উত্তর নেই। অনেক পারফরম্যান্স ইস্যুর মতো, আমি অনুমান করি উত্তরটি "এটি নির্ভর করে"।


প্রকৃত মূল্যবোধ কত দিন? একটি VARCHAR(2000)যা সাধারণত দশটি অক্ষর সঞ্চয় করে তা হ'ল একটি জিনিস; রেকর্ডে একটি শক্ত 2,000 বাইট অন্য কিছু।
সমস্ত ট্রেডের জোন

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

1
হ্যাঁ # গ্রেইম, এখানে দুর্গন্ধ আছে - আমি মনে করি এটি "উত্তরাধিকার" বলে called এই ডাটাবেসগুলিতে প্রচুর সমস্যা রয়েছে।
রাউলরবিন

উত্তর:


14

কখনও একটি বড় শব্দ, তবে, সাধারণভাবে, না, আমি কোনও ভার্চর (2000) ক্ষেত্রটি কোনও INCLUDE এ রাখি না।

এবং হ্যাঁ, পৃষ্ঠার স্তরে ডেটা যেভাবে সংরক্ষণ করা হয় তা সূচকটির ব্যবহারের উপর নির্ভর করে গুরুতরভাবে সূচকটির কার্য সম্পাদনকে প্রভাবিত করতে পারে।

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

এটি আপনার ক্যোয়ারিতে বা আপনার সিস্টেমে কোনও সমস্যা কিনা তা নিশ্চিতভাবে জানতে, আপনাকে পাঠগুলি, বিশেষত ক্যোয়ারীটি যে পৃষ্ঠাগুলি ব্যবহার করে তার সংখ্যাটি পর্যবেক্ষণ করতে হবে।


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

1
ক্যোয়ারির জন্য আইও অন স্ট্যাটেস্টিকস সেট করে আপনাকে অনেক কিছু বলবে, লজিক্যাল রিডগুলি অ্যাক্সেস করা পৃষ্ঠাগুলির সংখ্যা উপস্থাপন করে। সাধারণ পারফরম্যান্সের তথ্য পেতে আপনি পারফরম্যান কাউন্টার থেকে সেকেন্ডের জন্য / পড়ার জন্যও নজর রাখতে পারেন।
গ্রান্ট ফ্রেঞ্চে

6

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


পিকে সম্পর্কে আপনার পরামর্শটি দুর্দান্ত ধারণা, যদিও আমি এই ক্ষেত্রে এটি প্রয়োগ করতে সক্ষম হবো না - অন্যান্য প্রশ্নের জন্য বিদ্যমান পিকে প্রয়োজনীয়। (এটি একটি কৌশল যা আমি সরঞ্জামবক্সে
রাখব

4

উত্তর দেওয়া শক্ত is এটি সব আপনার পড়ার উপর নির্ভর করবে: লেখার অনুপাত। আপনি কি অন্তর্ভুক্ত কলাম সহ এবং ছাড়াও কোনও ওয়ার্কলোড পরীক্ষা করেছেন বা একটি পরীক্ষা সিস্টেমের উপর একটি সম্পূর্ণ ব্যবসায়ের চক্র সিমুলেট করেছেন? এটি ব্যতীত অনুসন্ধানে অনেক খরচ হতে পারে তবে আপনি যদি এটি পড়ার চেয়ে বেশিবার ডেটা আপডেট করে থাকেন তবে তা ঠিক আছে।


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

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

3

আমি জানি যে আমি এই দলের জন্য দেরি করেছি, তবে আমি সারিগুলি সনাক্তকরণের জন্য যেমন স্ট্রেরিং (col3,10,1) হিসাবে ব্যবহৃত ঠিক তা প্রকাশ করব। যদি পুরো কল 3 ব্যবহার করা হয় তবে আমি চেকসুম (কল 3) সূচী করতাম (বুঝতে পারছিলাম যে সেখানে সংঘর্ষের সংঘাত হতে পারে)।

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