সংক্ষিপ্ত সংস্করণ: সন্ধান করা আরও ভাল
কম সংক্ষিপ্ত সংস্করণ: সন্ধানটি সাধারণত অনেক বেশি ভাল তবে অনেকগুলি সিক্স (উদাহরণস্বরূপ বাজে ক্যারলেটেড সাব-কোয়েরিগুলির সাথে খারাপ কোয়েরি ডিজাইনের কারণে বা আপনি কার্সার অপারেশন বা অন্যান্য লুপে অনেকগুলি অনুসন্ধান করছেন) এর চেয়ে খারাপ হতে পারে be স্ক্যান করুন, বিশেষত যদি আপনার কোয়েরিতে প্রভাবিত টেবিলের বেশিরভাগ সারি থেকে তথ্য ফেরত আসা শেষ হয়ে যায়।
কর্মক্ষমতা সম্পর্কিত প্রভাবগুলি সম্পূর্ণরূপে বোঝার জন্য ডেটা সন্ধানের ক্রিয়াকলাপের জন্য এটি পুরো পরিবারকে কভার করতে সহায়তা করে।
টেবিল স্ক্যান: আপনার প্রশ্নের সাথে প্রাসঙ্গিক কোনও সূচি ছাড়াই পরিকল্পনাকারী একটি টেবিল স্ক্যান ব্যবহার করতে বাধ্য হন যার অর্থ প্রতি সারিটি তাকাতে হয়। এটি ডিস্ক থেকে টেবিলের ডেটা পড়ার সাথে সম্পর্কিত প্রতিটি পৃষ্ঠার ফলস্বরূপ হতে পারে যা প্রায়শই সবচেয়ে খারাপ পরিস্থিতি। নোট করুন যে কোনও প্রশ্নের জন্য এটি একটি টেবিল স্ক্যান ব্যবহার করবে এমনকি কোনও দরকারী সূচক উপস্থিত থাকলেও - এটি সাধারণত কারণ টেবিলের ডেটা এত ছোট হয় যে সূচীকরণগুলি অতিক্রম করতে আরও ঝামেলা হয় (এটি যদি এমন হয় তবে আপনি আশা করতে পারেন সূচকের চূড়ান্তকরণের পরিমাপটি ভাল বলে ধরে নিয়ে ডেটা বাড়ার সাথে সাথে পরিবর্তনের পরিকল্পনা করুন)।
সারি সন্ধানের সাথে সূচি স্ক্যানগুলি: কোনও সন্ধানের জন্য সরাসরি ব্যবহার করা যায় এমন কোনও সূচি পাওয়া যায় নি তবে ডান কলামগুলিতে একটি সূচক উপস্থিত রয়েছে যা সূচক স্ক্যান ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, যদি আপনার কাছে কলাম 1, কল 2, কল 3 এর সূচী সহ 20 টি কলামযুক্ত একটি বড় টেবিল রয়েছে এবং আপনি ইস্যু করেন SELECT col4 FROM exampletable WHERE col2=616
, সেক্ষেত্রে সূচকে ক্যোয়ারীতে col2
স্ক্যান করা পুরো টেবিলটি স্ক্যান করার চেয়ে ভাল। মিলের সারিগুলি একবার খুঁজে পাওয়া গেলে তারপরে ডেটা পৃষ্ঠাগুলি পিকআপ কল 4 পড়তে হবে আউটপুট (বা আরও যোগদানের জন্য) যা কোয়েরি প্ল্যানে আপনি যখন দেখেন "বুকমার্ক লুক" এর পর্যায়টি কী।
সারি সন্ধানগুলি ছাড়াই সূচি স্ক্যানগুলি: উপরের উদাহরণটি যদি হয় SELECT col1, col2, col3 FROM exampletable WHERE col2=616
তবে ডেটা পৃষ্ঠাগুলি পড়ার জন্য অতিরিক্ত প্রচেষ্টা প্রয়োজন হয় না: একবার সূচী সারিগুলির সাথে মিলে col2=616
গেলে সমস্ত অনুরোধ করা ডেটা জানা যায়। এ কারণেই আপনি কখনও কখনও এমন কলামগুলি দেখেন যেগুলি কখনই অনুসন্ধান করা হবে না, তবে আউটপুটটির জন্য অনুরোধ করা হতে পারে, সূচকের শেষে যুক্ত করা হয়েছে - এটি সারি অনুসন্ধানগুলি সংরক্ষণ করতে পারে। শুধুমাত্র এই কারণে এবং এই কারণে কোনও সূচীতে কলাম যুক্ত করার সময় INCLUDE
, ইঞ্জিনটি জানানোর জন্য তাদের এই ক্লজটি যুক্ত করুন যে এই কলামগুলির উপর ভিত্তি করে অনুসন্ধানের জন্য সূচী বিন্যাসকে অনুকূলিতকরণের প্রয়োজন নেই (এটি এই কলামগুলিতে করা আপডেটগুলিকে গতি দিতে পারে) । সূচক স্ক্যানগুলি কোনও ফিল্টারিং ধারা ছাড়াও কোয়েরিতে ফলাফল আসতে পারে: SELECT col2 FROM exampletable
সারণির পৃষ্ঠাগুলির পরিবর্তে এই উদাহরণ সূচকটি স্ক্যান করবে।
সূচক সিক্স (সারি সন্ধানের সাথে বা ছাড়া) : সন্ধানে সমস্ত সূচক বিবেচনা করা হয় না। ক্যোয়ারির SELECT * FROM exampletable WHERE c1 BETWEEN 1234 AND 4567
জন্য ক্যোয়ারী ইঞ্জিনটি প্রথম সারিটি সূচকটিতে গাছ ভিত্তিক অনুসন্ধানের সাথে মিলবে এবং c1
তারপরে এটি পরিসীমাটি শেষ না হওয়া পর্যন্ত সূচীটি নেভিগেট করতে পারে (এটি একটি প্রশ্নের সাথে একই কারণ c1=1234
শর্তের সাথে কোনও =
অপারেশনের সাথেও অনেকগুলি সারি মেলে থাকতে পারে )। এর অর্থ সূচক (বা সারণী) এর প্রতিটি পৃষ্ঠার পরিবর্তে কেবল প্রাসঙ্গিক সূচী পৃষ্ঠাগুলি (প্লাস প্রাথমিক অনুসন্ধানের জন্য কয়েকটি প্রয়োজনীয়) পড়তে হবে।
ক্লাস্টারড ইনডেক্স: একটি ক্লাস্টারড ইনডেক্সের সাহায্যে টেবিলের ডেটা পৃথক হিপ স্ট্রাকচারের পরিবর্তে সেই সূচকের পাতার নোডগুলিতে সংরক্ষণ করা হয়। এর অর্থ হ'ল যে সূচিগুলি ব্যবহার করে সারিগুলি সন্ধান করার পরে আর কোনও অতিরিক্ত সারি সন্ধানের প্রয়োজন হবে না [যতক্ষণ না আপনার কাছে TEXT
পৃষ্ঠাগুলির অফ-ডেটা যেমন কলাম বা VARCHAR(MAX)
লম্বা ডেটাযুক্ত কলামগুলি থাকে]]।
আপনি শুধুমাত্র এই কারণে এক ক্লাস্টার সূচক থাকতে পারে [1] , ক্লাস্টার সূচক হয় পরিবর্তে একটি পৃথক গাদা গঠন থাকার আপনার টেবিল, তাই যদি আপনি ব্যবহার এক [2] বেছে নেওয়া হয়েছে যেখানে আপনি এটি সাবধানে সর্বাধিক লাভ পেতে হবে।
এছাড়াও লক্ষ করুন যে ক্লাস্টারড ইনডেক্সটি টেবিলের জন্য "ক্লাস্টারিং কী" এবং টেবিলের প্রতিটি নন-ক্লাস্টারড ইনডেক্সে অন্তর্ভুক্ত রয়েছে, তাই প্রশস্ত ক্লাস্টারড সূচকটি সাধারণত ভাল ধারণা নয়।
[1] প্রকৃতপক্ষে, আপনি টেবিলের প্রতিটি কলাম কভার বা অন্তর্ভুক্ত নন-ক্লাস্টারযুক্ত সূচকগুলি সংজ্ঞায়িত করে কার্যকরভাবে একাধিক ক্লাস্টার ইনডেক্স করতে পারেন , তবে এটি স্থান অপব্যয় করার সম্ভাবনা রয়েছে যার একটি লেখার পারফরম্যান্স প্রভাব রয়েছে তাই যদি আপনি এটি করা নিশ্চিত করেন তবে আপনার সত্যই দরকার
[2] আমি যখন বলবেন "আপনি একটি ক্লাস্টার সূচক ব্যবহার করুন", নোট সাধারণভাবে বাঞ্ছনীয় যে আপনি কি কি করতে প্রতিটি টেবিলের উপর এক আছে। সমস্ত নিয়মের অফ-আঙুলের সাথে ব্যতিক্রম রয়েছে, সারণীগুলি যেগুলি বাল্ক সন্নিবেশ এবং আনর্ডারড রিড (ইটিএল প্রক্রিয়াগুলির জন্য স্টেজিং টেবিল সম্ভবত) সর্বাধিক সাধারণ উদাহরণ হিসাবে দেখা যায় than
অতিরিক্ত পয়েন্ট: অসম্পূর্ণ স্ক্যানগুলি:
এটি মনে রাখা গুরুত্বপূর্ণ যে বাক্যটির উপর নির্ভর করে কোনও টেবিল / সূচক স্ক্যানটি পুরো টেবিলটি আসলে স্ক্যান করতে পারে না - যদি যুক্তিটি অনুমতি দেয় তবে ক্যোয়ারী প্ল্যানটি এটি প্রাথমিকভাবে বাতিল করতে সক্ষম হতে পারে। এর সহজ উদাহরণ SELECT TOP(1) * FROM HugeTable
- আপনি যদি এর জন্য ক্যোয়ারী পরিকল্পনার দিকে নজর দেন তবে আপনি দেখতে পাবেন যে স্ক্যান থেকে কেবল একটি সারি ফিরে এসেছে এবং আপনি যদি আইও এর পরিসংখ্যানটি দেখে থাকেন তবে আপনি দেখতে SET STATISTICS IO ON; SELECT TOP(1) * FROM HugeTable
পাবেন যে এটি কেবল খুব অল্প সংখ্যকই পড়েছে পৃষ্ঠাগুলি (সম্ভবত কেবল একটি)
একই ঘটতে পারে যদি কোনও WHERE
বা শিরোনামের ভবিষ্যদ্বাণীটি JOIN ... ON
স্ক্যানের সাথে একই সাথে চালানো যায় তবে এটির ডেটা যদি উত্স হয়। কোয়েরি পরিকল্পনাকারী / রানার কখনও কখনও স্ক্যানগুলির প্রাথমিক সমাপ্তিটিকে এভাবে চালিয়ে যাওয়ার জন্য ডেটা উত্সগুলির দিকে ফিরে ভবিষ্যদ্বাণীগুলি সম্পর্কে প্রজ্ঞাবান সম্পর্কে খুব চতুর হতে পারে (এবং কখনও কখনও আপনি এগুলি করতে সহায়তা করার জন্য কোয়েরিগুলিকে পুনর্বিন্যাসে চালাক হতে পারেন!)! যদিও ডাটা ডান-থেকে-বাম মান ক্যোয়ারী পরিকল্পনা প্রদর্শনে তীর অনুযায়ী বয়ে যুক্তিবিজ্ঞান বাম-থেকে-ডান রান আগেই পরবর্তী শুরু করতে পারেন প্রতিটি পদক্ষেপ (ডান-থেকে-বাম) অগত্যা সমাপ্তির চালানো হয় না। উপরের সাধারণ উদাহরণে যদি আপনি কোয়েরি প্ল্যানের প্রতিটি ব্লককে এজেন্ট হিসাবে দেখেন তবে SELECT
এজেন্ট TOP
এজেন্টকে একটি সারির জন্য জিজ্ঞাসা করে যা ঘুরে ফিরে জিজ্ঞাসা করেTABLE SCAN
এজেন্ট একজনের জন্য, তারপরে SELECT
এজেন্ট অন্যটির জন্য জিজ্ঞাসা করে তবে TOP
এজেন্ট জানে যে টেবিল পাঠককে জিজ্ঞাসা করার কোনও দরকার নেই, SELECT
এজেন্ট একটি "আর কোনও প্রাসঙ্গিক নয়" প্রতিক্রিয়া পেয়ে যায় এবং জানে যে সমস্ত কাজ সম্পন্ন হয়েছে। অনেক অপারেশন আরো জটিল উদাহরণ একটি টেবিল / সূচক স্ক্যান সত্যিই তাই প্রায়ই অবশ্যই অপ্টিমাইজেশান এই সাজানোর ব্লক করে যে সারি পড়া, কিন্তু সতর্কতা অবলম্বন উপসংহার যে কোনো স্ক্যান একটি ব্যয়বহুল অপারেশন হওয়া আবশ্যক ঝাঁপ না।