কোয়েরিটি হ'ল
SELECT SUM(Amount) AS SummaryTotal
FROM PDetail WITH(NOLOCK)
WHERE ClientID = @merchid
AND PostedDate BETWEEN @datebegin AND @dateend
সারণীতে 103,129,000 সারি রয়েছে।
দ্রুত পরিকল্পনা ক্লায়েন্টআইড দ্বারা তারিখের একটি অবশিষ্টাংশের শিকারের সাথে দেখা হবে তবে এটি পুনরুদ্ধার করতে 96 টি লুকআপ করা দরকার Amount
। <ParameterList>
পরিকল্পনা বিভাগে নিম্নরূপ।
<ParameterList>
<ColumnReference Column="@dateend"
ParameterRuntimeValue="'2013-02-01 23:59:00.000'" />
<ColumnReference Column="@datebegin"
ParameterRuntimeValue="'2013-01-01 00:00:00.000'" />
<ColumnReference Column="@merchid"
ParameterRuntimeValue="(78155)" />
</ParameterList>
ধীর পরিকল্পনাটি তারিখ অনুসারে আপাতদৃষ্টিতে দেখায় এবং ক্লায়েন্টআইডির অবশিষ্টাংশের ভবিষ্যদ্বাণীটি মূল্যায়নের জন্য এবং পরিমাণটি পুনরুদ্ধার করার জন্য নজর রাখে (আনুমানিক 1 বনাম প্রকৃত 7,388,383)। <ParameterList>
অধ্যায়
<ParameterList>
<ColumnReference Column="@EndDate"
ParameterCompiledValue="'2013-02-01 23:59:00.000'"
ParameterRuntimeValue="'2013-02-01 23:59:00.000'" />
<ColumnReference Column="@BeginDate"
ParameterCompiledValue="'2013-01-01 00:00:00.000'"
ParameterRuntimeValue="'2013-01-01 00:00:00.000'" />
<ColumnReference Column="@ClientID"
ParameterCompiledValue="(78155)"
ParameterRuntimeValue="(78155)" />
</ParameterList>
এই দ্বিতীয় যদি ParameterCompiledValue
হয় না খালি। এসকিউএল সার্ভার সফলভাবে ক্যোয়ারীতে ব্যবহৃত মানগুলি স্নিগ্ধ করে।
"এসকিউএল সার্ভার 2005 প্র্যাক্টিকাল ট্রাবলশুটিং" বইয়ের স্থানীয় ভেরিয়েবলগুলি ব্যবহার করার কথা রয়েছে
পরামিতি স্নিফিংকে পরাভূত করতে স্থানীয় পরিবর্তনগুলি ব্যবহার করা মোটামুটি সাধারণ কৌশল, তবে OPTION (RECOMPILE)
এবং OPTION (OPTIMIZE FOR)
ইঙ্গিতগুলি ... সাধারণত আরও মার্জিত এবং কিছুটা ঝুঁকিপূর্ণ সমাধান হয়
বিঃদ্রঃ
এসকিউএল সার্ভার ২০০৫-এ, বিবৃতি স্তরের সংকলন ক্যোয়ারীর প্রথম প্রয়োগের ঠিক আগে পর্যন্ত কোনও সঞ্চিত পদ্ধতিতে পৃথক বিবৃতি সংকলনের অনুমতি দেয়। ততক্ষণে স্থানীয় ভেরিয়েবলের মান জানা যাবে। তাত্ত্বিকভাবে এসকিউএল সার্ভার এটি ব্যবহার করে প্যারামিটারগুলি যেভাবে শুকিয়ে যায় সেভাবে স্থানীয় ভেরিয়েবলের মানগুলি স্নিগ্ধ করতে পারে। তবে এসকিউএল সার্ভার 7.0 এবং এসকিউএল সার্ভার 2000+ এ প্যারামিটার স্নিফিংকে পরাস্ত করতে স্থানীয় ভেরিয়েবলগুলি ব্যবহার করা সাধারণ কারণ, এসকিউএল সার্ভার 2005-এ স্থানীয় ভেরিয়েবলগুলির স্নিফিং সক্ষম করা হয়নি It এটি ভবিষ্যতে এসকিউএল সার্ভার রিলিজে সক্ষম হতে পারে যদিও এটি একটি ভাল আপনার যদি কোন পছন্দ থাকে তবে এই অধ্যায়ে বর্ণিত অন্যান্য বিকল্পগুলির মধ্যে একটির ব্যবহার করার কারণ।
দ্রুত পরীক্ষা থেকে এই পরিণতিটি উপরে বর্ণিত আচরণটি ২০০৮ এবং ২০১২ সালে এখনও একই রকম এবং চলকগুলি স্থগিত সংকলনের জন্য স্নিগ্ধ করা হয় না তবে কেবল যখন একটি স্পষ্ট OPTION RECOMPILE
ইঙ্গিত ব্যবহার করা হয়।
DECLARE @N INT = 0
CREATE TABLE #T ( I INT );
/*Reference to #T means this statement is subject to deferred compile*/
SELECT *
FROM master..spt_values
WHERE number = @N
AND EXISTS(SELECT COUNT(*) FROM #T)
SELECT *
FROM master..spt_values
WHERE number = @N
OPTION (RECOMPILE)
DROP TABLE #T
বিলম্বিত সংকলন সত্ত্বেও ভেরিয়েবলটি শুকানো হয় না এবং আনুমানিক সারির সংখ্যাটি সঠিক নয়
সুতরাং আমি ধরে নিই যে ধীর পরিকল্পনাটি ক্যোয়ারীর একটি প্যারামিটারাইজড সংস্করণ সম্পর্কিত।
ParameterCompiledValue
সমান ParameterRuntimeValue
তাই এই টিপিক্যাল প্যারামিটার আঘ্রাণ (যেখানে পরিকল্পনা মান এক সেট তারপর মূল্যবোধের অন্য সেট চালানোর জন্য কম্পাইল করা হয়েছিল) নয় পরামিতি সব জন্য।
সমস্যাটি হ'ল সঠিক পরামিতি মানগুলির জন্য যে পরিকল্পনাটি সংকলিত হয়েছে তা অনুপযুক্ত।
আপনি সম্ভবত বর্ণনা তারিখ আরোহী সঙ্গে সমস্যা আঘাত করছে এখানে এবং এখানে । এসকিউএল সার্ভার স্বয়ংক্রিয়ভাবে আপনার জন্য পরিসংখ্যান আপডেট করার আগে ১০০ মিলিয়ন সারি সহ একটি টেবিলের জন্য আপনার 20 মিলিয়ন সন্নিবেশ করাতে হবে (বা অন্যথায় সংশোধন করতে হবে)। দেখে মনে হয় গতবারে এগুলি আপডেট করা হয়েছিল শূন্য সারিতে ক্যোয়ারিতে তারিখের সীমা মেলে তবে এখন million মিলিয়ন করে।
আপনি আরও ঘন ঘন পরিসংখ্যান আপডেটের সময়সূচী তৈরি করতে পারেন, ট্রেস ফ্ল্যাগগুলি বিবেচনা 2389 - 90
করতে বা ব্যবহার করতে পারেন OPTIMIZE FOR UKNOWN
যাতে datetime
কলামটিতে বর্তমানে বিভ্রান্তিকর পরিসংখ্যান ব্যবহার করতে সক্ষম হওয়ার চেয়ে এটি অনুমানের পিছনে পড়ে যায় ।
এটি এসকিউএল সার্ভারের পরবর্তী সংস্করণে (2012 এর পরে) প্রয়োজন হতে পারে না। কোনও সম্পর্কিত কানেক্ট আইটেমটিতে আকর্ষণীয় প্রতিক্রিয়া রয়েছে
মাইক্রোসফ্ট 8/28/2012 এ 1:35 অপরাহ্ন পোস্ট করেছে
আমরা পরবর্তী বড় রিলিজের জন্য একটি কার্ডিনালিটি অনুমানের বর্ধন করেছি যা মূলত এটিকে ঠিক করে দেয়। আমাদের পূর্বরূপগুলি প্রকাশিত হওয়ার পরে বিশদগুলির জন্য যোগাযোগ করুন। এরিক
এই 2014 এর উন্নতিটি নিবন্ধের শেষের দিকে বেনিয়ামিন নেভারেজকে দেখেছে:
নিউ SQL সার্ভার Cardinality মূল্নির্ধারক এ ফার্স্ট লুক ।
এটি প্রদর্শিত হবে যে নতুন কার্ডিনালিটি অনুমানকারী পিছিয়ে পড়বে এবং 1 সারিটির প্রাক্কলন না দিয়ে এই ক্ষেত্রে গড় ঘনত্ব ব্যবহার করবে।
2014 কার্ডিনালিটি অনুমানকারী এবং আরোহী কী সমস্যা সম্পর্কে কিছু অতিরিক্ত বিশদ এখানে:
এসকিউএল সার্ভারে নতুন কার্যকারিতা 2014 - পার্ট 2 - নতুন কার্ডিনালিটির অনুমান