টি-এসকিউএলে আইএফ ব্যবহার করা কার্যকরকরণ পরিকল্পনার ক্যাচিংকে দুর্বল করে বা ব্রেক করে?


20

আমার কাছে পরামর্শ দেওয়া হয়েছে যে টি-এসকিউএল ব্যাচে আইএফ স্টেটমেন্টের ব্যবহার পারফরম্যান্সের জন্য ক্ষতিকর। আমি কিছু নিশ্চিতকরণ খুঁজতে বা এই দাবিটি বৈধ করার চেষ্টা করছি। আমি এসকিউএল সার্ভার 2005 এবং 2008 ব্যবহার করছি।

জোর দেওয়া হচ্ছে নিম্নলিখিত ব্যাচের সাথে: -

IF @parameter = 0
 BEGIN
  SELECT ... something
 END

ELSE
 BEGIN
  SELECT ... something else
 END

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

এছাড়াও এই ক্ষেত্রে কি ঘটে:

IF EXISTS (SELECT ....)
 BEGIN
  SELECT ... something
 END

ELSE
 BEGIN
  SELECT ... something else
 END

কোথায় কোন শাখা কার্যকর করা হবে তা আগেই নির্ধারণ করা সম্ভব নয়?



1
এসকিউএল সার্ভার শাখা বিবেচনা করে না বলে এক্সিকিউশন প্ল্যানটি পুনরায় ব্যবহার করতে পারে এবং কেবল শাখাগুলিতে থাকা বিবৃতি রয়েছে।
মার্টিনসি

উত্তর:


10

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

আমি প্রতিটি শাখার জন্য এসকিউএল তাদের নিজস্ব সঞ্চিত পদ্ধতিতে রাখব, যাতে উত্পন্ন পরিকল্পনাটি সেই শাখার জন্য পরামিতিগুলির প্রকৃত ব্যবহারের ভিত্তিতে তৈরি হয়।


6

একমাত্র শর্টকাট হবে IF 1 = 1

@ পরিমিতি এবং উপস্থিতি উভয়কেই এখনও "জেনারেল কেস" ( @parameter = 42বলুন) এর প্রক্রিয়াজাতকরণ প্রয়োজন

এই বলে যে ... প্রকৃত বাস্তবায়ন পরিকল্পনার পাশাপাশি প্রোফাইলাররা রিকম্প্লিশন ইভেন্টগুলি ক্যাপচার করার পাশাপাশি কী বলে? (আমি জাওয়ের উত্তর অনুসারে আনুমানিক পরিকল্পনা অপছন্দ করি)


3

আসল নয়, আনুমানিক বাস্তবায়ন পরিকল্পনাটি প্রদর্শনের চেষ্টা করুন। আপনি দেখতে পাবেন যে প্রথমটিতে CONDঅপারেটর রয়েছে ।

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

অভ্যন্তরীণভাবে সম্পাদন পরিকল্পনা হ'ল এক্সপ্রেশন গাছের অনুরূপ একটি কাঠামো।


0

পাস করা পরামিতিগুলির উপর ভিত্তি করে পরিকল্পনা তৈরি করা হবে তাই বাস্তবে আমি বলব না - সাধারণত পরামিতিগুলির উপর ভিত্তি করে শর্তযুক্ত যুক্তি রাখা কার্য সম্পাদনের পক্ষে ক্ষতিকারক নয়।

ক্যোয়ারী অপ্টিমাইজারটি লক্ষ্য করার জন্য প্যারামিটারগুলি যথেষ্ট পরিমাণে বৈকল্পিক হিসাবে ধরে নিয়ে আপনি একাধিক পরিকল্পনা তৈরি করবেন।

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


0

হতে পারে এটি 2005 এবং 2008 সালে উন্নত হয়েছে, তবে 2000 এ শর্তযুক্ত ব্যবহার করা আপনার বর্ণনার চেয়ে আরও খারাপ হতে পারে, এটি প্রক্রিয়াটির প্রথম রান পরিচালনা করার জন্য একটি পরিকল্পনা সংকলন করবে এবং তারপরে শর্তগুলির পরেও প্রক্রিয়াটি কার্যকর করতে সেই পরিকল্পনাটি ব্যবহার করবে পরিবর্তন করেছেন। আমার অভিজ্ঞতায় এটি কয়েক ঘন্টা দৌড়াতে কয়েক মিনিটে দৌড়ে এমন প্রশ্নের সৃষ্টি করেছিল। যদিও আমি এখন ২০০৮ ব্যবহার করি এবং ২০০৫ ব্যবহার করেছি তবে কোডালিগুলি কীভাবে কাজ করবে সে বিষয়ে আমি মন্তব্য করতে পারছি না কারণ আমি আর সেগুলি ব্যবহার করি না।


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