আমি একটি অদ্ভুত পরিস্থিতির মুখোমুখি হয়েছি যেখানে OPTION (RECOMPILE)
আমার ক্যোয়ারীতে সংযোজন করার ফলে এটি অর্ধেক সেকেন্ডে চলতে পারে, যখন এটিকে বাদ দিলে কোয়েরিটি পাঁচ মিনিটেরও বেশি সময় নেয়।
ক্যোরি বিশ্লেষক বা আমার সি # প্রোগ্রামের মাধ্যমে কোয়েরি কার্যকর করা হয় এমন ক্ষেত্রে এটি ঘটে SqlCommand.ExecuteReader()
। কল করা (না কল করা) DBCC FREEPROCCACHE
বা DBCC dropcleanbuffers
কোনও পার্থক্য করে না; অনুসন্ধানের ফলাফলগুলি সর্বদা তাত্ক্ষণিকভাবে OPTION (RECOMPILE)
এবং এটি ছাড়া পাঁচ মিনিটেরও বেশি ফিরানো হয় । ক্যোয়ারি সর্বদা একই পরামিতিগুলির সাথে ডাকা হয় [এই পরীক্ষার স্বার্থে]।
আমি এসকিউএল সার্ভার 2008 ব্যবহার করছি।
আমি এসকিউএল লেখার সাথে মোটামুটি স্বাচ্ছন্দ্যবহুল তবে এর আগে কখনও OPTION
কোনও জিজ্ঞাসায় কোনও কমান্ড ব্যবহার করি নি এবং এই ফোরামে পোস্টগুলি স্ক্যান না করা পর্যন্ত পরিকল্পনা ক্যাশেগুলির সম্পূর্ণ ধারণার সাথে অপরিচিত ছিলাম। পোস্টগুলি থেকে আমার বোঝা OPTION (RECOMPILE)
এটি একটি ব্যয়বহুল অপারেশন। এটি স্পষ্টতই ক্যোয়ারির জন্য একটি নতুন চেহারা কৌশল তৈরি করে। তাহলে এটি কেন, পরবর্তী প্রশ্নগুলি যে বাদ দেয় OPTION (RECOMPILE)
তা এত ধীর? পরবর্তী জিজ্ঞাসাগুলি কি পুনরায় সংকলনের ইঙ্গিতটি অন্তর্ভুক্ত করা পূর্ববর্তী কলটিতে গণনা করা সেই অনুসন্ধানের কৌশলটি ব্যবহার করা উচিত নয়?
এমন একটি কোয়েরি থাকা কি অত্যন্ত অস্বাভাবিক যে প্রতি একক কলটিতে একটি সংশোধন ইঙ্গিত দরকার?
এন্ট্রি-স্তরের প্রশ্নের জন্য দুঃখিত তবে আমি সত্যিই এর মাথা বা লেজ তৈরি করতে পারি না।
আপডেট: আমাকে কোয়েরি পোস্ট করতে বলা হয়েছে ...
select acctNo,min(date) earliestDate
from(
select acctNo,tradeDate as date
from datafeed_trans
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_money
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_jnl
where feedid=@feedID and feedDate=@feedDate
)t1
group by t1.acctNo
OPTION(RECOMPILE)
ক্যোয়ারি অ্যানালাইজারের কাছ থেকে পরীক্ষা চালানোর সময়, আমি নিম্নলিখিত লাইনগুলি পূর্বে চাপিয়ে দিই:
declare @feedID int
select @feedID=20
declare @feedDate datetime
select @feedDate='1/2/2009'
আমার সি # প্রোগ্রাম থেকে এটিকে কল করার সময়, প্যারামিটারগুলি SqlCommand.Parameters
সম্পত্তির মধ্য দিয়ে যায় ।
এই আলোচনার উদ্দেশ্যগুলির জন্য, আপনি ধরে নিতে পারেন যে প্যারামিটারগুলি কখনই পরিবর্তিত হয় না কারণ আমরা কারণ হিসাবে উপ-অনুকূল পরামিতিগুলির গন্ধকে বাতিল করতে পারি।
X = @X OR @X IS NULL
থেকে X=@X
এবং একটি চাইতে করণ দেখুন এখানে অথবা predicates নিচে উইন্ডোতে ফাংশন সঙ্গে একটি দৃশ্য বিরুদ্ধে আরও ঠেলাঠেলি
RECOMPILE
। কোনও ইভেন্টে ফাঁসির পরিকল্পনাটি ক্যাপচার করুন এবং পার্থক্যগুলি দেখুন look