sql server - tutorial - একটি এসকিউএল বিবৃতি sargable কি করে তোলে?




sql server tutorial (3)

সংজ্ঞা অনুসারে (কমপক্ষে যা আমি দেখেছি) থেকে সার্জেবল মানে একটি ক্যোয়ারী কোয়েরি ইঞ্জিন ব্যবহার করে অ্যাক্টিভেশন পরিকল্পনাটি অপ্টিমাইজ করার সক্ষম। আমি উত্তর খুঁজছেন চেষ্টা করেছি, কিন্তু বিষয় বিষয় অনেক মনে হচ্ছে না। সুতরাং প্রশ্ন হল, একটি এসকিউএল ক্যোয়ারী sargable কি না বা না? কোন ডকুমেন্টেশন ব্যাপকভাবে প্রশংসা করা হবে।

রেফারেন্স জন্য: SARGable


এই উত্তর আমি ডাটাবেস যথেষ্ট আচ্ছাদন সূচী আছে অনুমান। এই বিষয়ে যথেষ্ট প্রশ্ন আছে।

অনেক বার একটি প্রশ্নের প্রশ্নের সুনিশ্চিত করা সম্পর্কিত সূচকের tipping বিন্দু দ্বারা নির্ধারিত হয়। টিপিং বিন্দু একটি টেবিল যোগদান বা অন্য সম্মুখের সেট স্থাপিত যখন একটি সূচক অনুসন্ধান এবং স্ক্যান মধ্যে পার্থক্য সংজ্ঞায়িত করে। একটি সন্ধান অবশ্যই একটি সম্পূর্ণ টেবিলের স্ক্যান করার চেয়ে অনেক দ্রুত, তবে যখন আপনাকে অনেক সারি চাইতে হয়, তখন স্ক্যানটি আরও বেশি জ্ঞান অর্জন করতে পারে।

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

আপনি here একটি বিস্তারিত পোস্ট এবং উদাহরণ খুঁজে পেতে পারেন।


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


এটা করো না

WHERE Field LIKE '%blah%'

যে একটি টেবিল / সূচক স্ক্যান কারণ, কারণ LIKE মান একটি ওয়াইল্ডকার্ড অক্ষর দিয়ে শুরু হয়।

এটা করো না

WHERE FUNCTION(Field) = 'BLAH'

যে একটি টেবিল / সূচক স্ক্যান কারণ।

ডাটাবেস সার্ভারটি টেবিলের প্রতিটি সারির বিপরীতে FUNCTION () মূল্যায়ন করতে হবে এবং তারপরে এটি 'ব্লাথ' এর সাথে তুলনা করবে।

যদি সম্ভব হয়, বিপরীত এটি করুন:

WHERE Field = INVERSE_FUNCTION('BLAH')

এটি একবারে পরামিতির বিরুদ্ধে INVERSE_FUNCTION () চালাবে এবং এখনও সূচকের ব্যবহারকে মঞ্জুরি দেবে।





performance