বিদ্যমান সূচকগুলি যখন নতুন সূচকে সমস্ত কলাম অন্তর্ভুক্ত করেছিল তখন কেন এই নতুন সূচক তৈরি করা কর্মক্ষমতা এত উন্নত করেছিল?


19

আমার লগ এবং লগ আইটেম টেবিল রয়েছে; আমি উভয় থেকে কিছু তথ্য দখল করার জন্য একটি কোয়েরি লিখছি। এখানে হাজার হাজার রয়েছে Logsএবং প্রত্যেকের Log125 টি পর্যন্ত থাকতে পারেLogItems

প্রশ্নের ক্যোয়ারী জটিল তাই আমি এড়িয়ে যাচ্ছি (যদি কেউ মনে করেন এটি গুরুত্বপূর্ণ হয় তবে আমি সম্ভবত এটি পোস্ট করতে পারি), তবে যখন আমি এসএসএমএসের আনুমানিক ক্যোয়ারী প্ল্যান চালিয়েছিলাম তখন এটি আমাকে জানিয়েছিল যে একটি নতুন নন-ক্লাস্টারড ইনডেক্স 100% পর্যন্ত কার্যকারিতা উন্নত করবে ।

Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified

Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])

কেবল মজাদার জন্য, আমি এই নতুন সূচকটি তৈরি করেছি এবং ক্যোয়ারীটি চালিয়েছি এবং আমার অবাক করে দিয়েছি, আমার ক্যোয়ারীটি চালাতে এখন 1 ডলার সময় লাগে, যখন এটি 10+ সেকেন্ডের আগে ছিল।

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

দ্রষ্টব্য: এসকিউএল সার্ভারটি আমার ফলাফলগুলি ক্যাশে করছে বলে আমি মনে করি না, সূচিটি তৈরি করার আগে আমি প্রায় 25-30 বার প্রশ্নটি চালিয়েছিলাম এবং সূচির পরে এটি 10-15 সেকেন্ড সময় নেয়, এখন সূচি অনুসারে এটি 1 ডলার is বা কম.


অতিরিক্ত নন-ক্ল্লাস্টার্ড সূচক তৈরি করার আগে, প্রকৃত বাস্তবায়ন পরিকল্পনাটি সূচক ব্যবহারের জন্য কী দেখায়?
থমাস স্ট্রিংগার

100% দ্বারা উন্নত পারফরম্যান্স কী?

@ শার্ক ভাল প্রশ্ন, আমি নিশ্চিত নই। এটি আমার প্রথম পারফরম্যান্স ডিবাগিং পরিস্থিতি। আমি নিশ্চিত যে এগিয়ে যাচ্ছে। এটি সমস্তই 'মিসিং ইনডেক্স' এবং এটি কোন ক্ষেত্রগুলি বলেছিল।

@ জেফো এটিই এসএসএমএস বলেছে: "ক্যোয়ারী প্রসেসর অনুমান করে যে নিম্নলিখিত সূচীটি প্রয়োগ করে কোয়েরি ব্যয়কে 100% বাড়িয়ে তুলতে পারে।"

উত্তর:


21

একটি সূচীতে কলামগুলির ক্রম গুরুত্বপূর্ণ। যদি ফিল্টারিংয়ের জন্য সূচক থেকে 1 এবং 4 কলামের প্রয়োজন হয় তবে সূচকটি সাহায্য করবে না। প্রথম এন টানা কলামগুলি দ্বারা ফিল্টার করার সময় এটি কেবল কার্যকর।

এর কারণ সূচক একটি গাছ। আপনি দক্ষতার গাছ যেখানে সব নোড নির্বাচন করতে পারবেন না column3 = somethingকারণ তারা সব অন্যান্য নিক্ষিপ্ত হয় স্থান, বিভিন্ন মান একাত্মতার column1এবং column2। তবে আপনি যদি জানেন column1এবং column2পাশাপাশি, গাছের ডান শাখা চিহ্নিত করা কোনও মস্তিষ্কের নয়।


তাহলে কি ধরে নেওয়া নিরাপদ হবে (সাধারণভাবে) "টেবিলে" আঘাত করতে চলেছে এমন "ক্লজ" ধারাগুলির প্রতি আমার একটি সূচক প্রয়োজন?

আমি একবার যথাযথ ক্রমে সূচকটি ব্যবহার করে তা নিশ্চিত করেই অন্য কারও জিজ্ঞাসার ব্যাপক গতি সম্পন্ন করেছি।

1
@ নেট বিস্তৃতভাবে, হ্যাঁ কিছু whereগুলি ওভারল্যাপ হতে পারে, যাতে আপনার একটি সূচক থাকতে পারে যা বেশ কয়েকটি whereগুলি সুন্দরভাবে কভার করে ; বা আপনি কোনও whereধারাটির কিছু অংশ উপেক্ষা করতে পারেন কারণ একটি নির্দিষ্ট কলামে সূচীকরণ কোনওভাবেই সহায়তা করবে না (নিম্ন নির্বাচন); তবে ব্যাপকভাবে, হ্যাঁ

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

1
@ চকব্লুমেরিচ ক্লোজে কলামগুলির ক্রম whereগুরুত্বপূর্ণ নয় important সার্ভার সর্বদা তাদের বিদ্যমান সূচকগুলির সর্বোত্তম ব্যবহার করার ব্যবস্থা করবে। এটি কেবল সূচক থাকার প্রশ্নে whereএটির প্রয়োজনীয় সমস্ত কলামকে এর প্রথম কলাম হিসাবে অন্তর্ভুক্ত করে ।

12

নেতৃস্থানীয় প্রান্ত একটি সূচক কি গুরুত্বপূর্ণ।

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

আপনার যদি "গর্ত" থাকে, যেমন আপনি যদি অনুসন্ধান করেন ParentLogIDএবং DatabaseModifiedতবে কেবল সূচকটি চালু থাকে {ParentLogID, DateModified, Name, DatabaseModified}তবে কেবল {ParentLogID}সূচকের অংশটি দক্ষতার সাথে ব্যবহার করা যেতে পারে।

(দ্রষ্টব্য: কিছু ডিবিএমএস {DatabaseModified}অংশটি "স্কিপ স্ক্যান" এর মাধ্যমে ব্যবহার করতে পারে , তবে আপনার ডিবিএমএস যদি নিয়মিত সূচকের অ্যাক্সেসের তুলনায় এটি খুব কম দক্ষ হয় তবেও )


সুতরাং যদি আমার কাছে Columns (a, b, c, d, e, f)এবং বেশিরভাগ প্রশ্নগুলি ... WHERE A IN(...) AND B = 3আমার সূচক Index(a,b,c,d)হয় তবে এটি একটি ভাল তবে এটি আমার পক্ষে যদি ... WHERE A IN (...) AND D = 5আমার নতুন সূচকটি তৈরি করে, Index(a,d)পারফরম্যান্সকে এতটা উন্নত করে তোলে তবে তা কার্যকর হয় না ?

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