আন্তঃ পদক্ষেপের পরিসংখ্যান মানের জন্য> = এবং> এর জন্য কার্ডিনালটির অনুমান


9

আমি বুঝতে চেষ্টা করছি যে এসকিউএল সার্ভার এসকিউএল সার্ভার ২০১৪ সালে যেখানে 'এর চেয়ে বড়' এবং 'সমান এর চেয়ে বড়' এর জন্য অনুমান করার চেষ্টা করে।

আমি মনে করি যে আমি কার্ডিনালিটি অনুমানটি বুঝতে পারি যখন এটি যদি আমি পদক্ষেপের জন্য উদাহরণস্বরূপ আঘাত করি

    select * from charge where charge_dt >= '1999-10-13 10:47:38.550'

কার্ডিনালিটির অনুমান 6672 যা সহজেই 32 (EQ_ROWS) + 6624 (RANGE_ROWS) + 16 (EQ_ROWS) = 6672 (নীচের স্ক্রিনশটের হিস্টগ্রাম) হিসাবে গণনা করা যায়

এখানে চিত্র বর্ণনা লিখুন

কিন্তু যখন আমি করি

    select * from charge where charge_dt >= '1999-10-13 10:48:38.550' 

(সময় বাড়িয়ে 10:48 করা হয়েছে এটি কোনও পদক্ষেপ নয়)

অনুমান 4844.13।

কিভাবে এটি গণনা করা হয়?

উত্তর:


9

একমাত্র অসুবিধা হিস্টোগ্রাম পদক্ষেপ (গুলি) কীভাবে পরিচালনা করতে হবে তা আংশিকভাবে ক্যোয়ারী প্রিকেটিক অন্তর দ্বারা আচ্ছাদিত । পূর্বাভাস পরিসীমা দ্বারা আচ্ছাদিত পুরো হিস্টোগ্রাম পদক্ষেপগুলি તુચ્છ হিসাবে প্রশ্নটিতে উল্লিখিত হয়েছে।

উত্তরাধিকার কার্ডিনালিটির অনুমান

F = কোয়েরি প্রিডিটেকে আচ্ছাদিত ধাপের সীমাটির ভগ্নাংশ (0 এবং 1 এর মধ্যে)।

প্রাথমিক ধারণাটি হ'ল Fপ্রিডিট দ্বারা কতটি অন্তর্-পদক্ষেপ স্বতন্ত্র মানগুলি আচ্ছাদিত তা নির্ধারণ করতে (লিনিয়ার ইন্টারপোলেশন) ব্যবহার করা । স্বতন্ত্র মান অনুসারে সারিগুলির গড় সংখ্যার (অভিন্নতা অনুমান করে) এই ফলাফলটিকে গুণিত করা, এবং সমান সারি পদক্ষেপটি যোগ করা কার্ডিনালটির প্রাক্কলন দেয়:

কার্ডিনালিটি = EQ_ROWS + (AVG_RANGE_ROWS * এফ * DISTINCT_RANGE_ROWS)

একই সূত্রটি সিই লিগ্যাসির জন্য >এবং ব্যবহার করা হয় >=

নতুন কার্ডিনালিটি অনুমানকারী

নতুন সিই পূর্ববর্তী অ্যালগরিদমকে সামান্য পরিবর্তন করে >এবং এর মধ্যে পার্থক্য করতে >=

টেকিং >প্রথম, সূত্র:

কার্ডিনালিটি = EQ_ROWS + (AVG_RANGE_ROWS * (এফ * (DISTINCT_RANGE_ROWS - 1)))

কারণ >=এটি:

কার্ডিনালিটি = EQ_ROWS + (AVG_RANGE_ROWS * (এফ * (DISTINCT_RANGE_ROWS - 1)) + 1))

+ 1প্রতিফলিত করে যখন তুলনা সমতা জড়িত থাকে, একটি ম্যাচ অধিকৃত হয় (অন্তর্ভুক্তি ধৃষ্টতা)।

প্রশ্ন উদাহরণে, Fহিসাবে গণনা করা যেতে পারে:

DECLARE 
    @Q datetime = '1999-10-13T10:48:38.550',
    @K1 datetime = '1999-10-13T10:47:38.550',
    @K2 datetime = '1999-10-13T10:51:19.317';

DECLARE
    @QR float = DATEDIFF(MILLISECOND, @Q, @K2), -- predicate range
    @SR float = DATEDIFF(MILLISECOND, @K1, @K2) -- whole step range

SELECT
    F = @QR / @SR;

ফলাফল 0.728219019233034>=অন্যান্য জ্ঞাত মানগুলির সাথে সূত্রের মধ্যে এটি প্লাগিং :

কার্ডিনালিটি = EQ_ROWS + (AVG_RANGE_ROWS * (এফ * (DISTINCT_RANGE_ROWS - 1)) + 1))
            = 16 + (16.1956 * ((0.728219019233034 * (409 - 1)) + 1))
            = 16 + (16.1956 * (0.728219019233034 * 408) + 1))
            = 16 + (16.1956 * (297.113359847077872 + 1))
            = 16 + (16.1956 * 298.113359847077872)
            = 16 + 4828.1247307393343837632
            = 4844.1247307393343837632
            = 4844.12473073933 (নির্ভুলতা ভাসতে)

এই ফলাফলটি প্রশ্নের মধ্যে 4844.13 এর অনুমানের সাথে একমত হয়েছে।

লেগ্যাসি সিই ব্যবহার করে একই ক্যোয়ারী (উদাহরণস্বরূপ ট্রেস পতাকা 9481 ব্যবহার করে) এর একটি অনুমান তৈরি করতে হবে:

কার্ডিনালিটি = EQ_ROWS + (AVG_RANGE_ROWS * এফ * DISTINCT_RANGE_ROWS)
            = 16 + (16.1956 * 0.728219019233034 * 409)
            = 16 + 4823.72307468722
            = 4839.72307468722

লিগ্যাসি সিই ব্যবহার >>=ব্যবহারের জন্য অনুমানটি একই হবে Note


4

ফিল্টার "এর চেয়ে বড়" বা "এর চেয়ে কম" হলে সারিগুলির অনুমানের সূত্রটি কিছুটা বোকা হয়ে যায়, তবে এটি আপনি পৌঁছাতে পারেন এমন একটি সংখ্যা।

সংখ্যা

পদক্ষেপ 193 ব্যবহার করে, এখানে সম্পর্কিত নম্বরগুলি দেওয়া হয়েছে:

RANGE_ROWS = 6624

EQ_ROWS = 16

AVG_RANGE_ROWS = 16.1956

পূর্ববর্তী পদক্ষেপ = 1999-10-13 10: 47: 38.550 থেকে RANGE_HI_KEY

বর্তমান পদক্ষেপ = 1999-10-13 10: 51: 19.317 থেকে RANGE_HI_KEY

WHERE ধারা থেকে মান = 1999-10-13 10: 48: 38.550

সূত্রটি

1) দুটি পরিসরের হাই কীগুলির মধ্যে এমএস খুঁজুন

SELECT DATEDIFF (ms, '1999-10-13 10:47:38.550', '1999-10-13 10:51:19.317')

ফলাফলটি 220767 এমএস।

2) সারি সংখ্যা সামঞ্জস্য করুন

আমাদের প্রতি মিলিসেকেন্ডে সারিগুলি সন্ধান করতে হবে, তবে আমাদের করার আগে, আমাদেরকে RANGE_ROWS থেকে AVG_RANGE_ROWS বিয়োগ করতে হবে:

6624 - 16.1956 = 6607.8044 সারি

3) সারিগুলির সামঞ্জস্য সংখ্যার সাথে প্রতি এমএসে সারি গণনা করুন:

6607.8044 সারি / 220767 এমএস = .0299311 প্রতি এমএসে সারি

4) WHERE ধারা এবং বর্তমান পদক্ষেপ RANGE_HI_KEY থেকে মানের মধ্যে এমএস গণনা করুন

SELECT DATEDIFF (ms, '1999-10-13 10:48:38.550', '1999-10-13 10:51:19.317')

এটি আমাদের 160767 এমএস দেয়।

5) প্রতি সেকেন্ডের সারিগুলির ভিত্তিতে এই ধাপে সারিগুলি গণনা করুন:

.0299311 সারি / এমএস * 160767 এমএস = 4811.9332 সারি

)) মনে রাখবেন কীভাবে আমরা আগে AVG_RANGE_ROWS বিয়োগ করেছি? তাদের আবার যুক্ত করার সময়। এখন আমরা প্রতি সেকেন্ডে সারি সম্পর্কিত সংখ্যা গণনা শেষ করেছি, আমরা নিরাপদে EQ_ROWS যুক্ত করতে পারি:

4811.9332 + 16.1956 + 16 = 4844.1288

গোল হয়েছে, এটি আমাদের 4844.13 অনুমান।

সূত্রটি পরীক্ষা করা হচ্ছে

প্রতি এমএসে সারিগুলি গণনা করার আগে কেন AVG_RANGE_ROWS বিয়োগ করা হবে সে সম্পর্কে আমি কোনও নিবন্ধ বা ব্লগ পোস্ট খুঁজে পাইনি। আমি ছিল আক্ষরিক - নিশ্চিত করতে তারা অনুমান, কিন্তু শুধুমাত্র গত মিলিসেকেন্ডে এ জন্য দায়ী করা হয় সক্ষম।

ওয়াইড ওয়ার্ল্ডআইম্পোর্টস ডাটাবেস ব্যবহার করে , আমি কিছু বৃদ্ধিমূলক পরীক্ষা করেছি এবং সারি অনুমানের হ্রাসটি ধাপের সমাপ্তি অবধি লিনিয়ার বলে মনে করেছি , যেখানে হঠাৎ করে 1x এভিজি_আরং_আরডব্লিউএস হিসাবে গণনা করা হয়।

এখানে আমার নমুনা ক্যোয়ারী:

SELECT PickingCompletedWhen
FROM Sales.Orders
WHERE PickingCompletedWhen >= '2016-05-24 11:00:01.000000'

আমি পিকিং কমপ্লিটডের জন্য পরিসংখ্যান আপডেট করেছি, তারপরে হিস্টোগ্রাম পেয়েছি:

DBCC SHOW_STATISTICS([sales.orders], '_WA_Sys_0000000E_44CA3770')

_WA_Sys_0000000E_44CA3770 (শেষ 3 টি পদক্ষেপ) এর জন্য হিস্টোগ্রাম

আমরা RANGE_HI_KEY এর কাছে যাওয়ার সাথে সাথে অনুমান করা সারিগুলি কীভাবে হ্রাস পাবে তা দেখার জন্য, আমি পুরো পদক্ষেপে নমুনা সংগ্রহ করেছি। হ্রাস হ্রাস রৈখিক, তবে এমন আচরণ করে যেমন AVG_RANGE_ROWS মানের সমান কয়েকটি সারি কেবল প্রবণতার অংশ না ... যতক্ষণ না আপনি RANGE_HI_KEY টিপুন এবং হঠাৎ হ'ল তারা প্রকাশিত debtণের মতো বাদ পড়েছে। আপনি এটি নমুনার ডেটাতে, বিশেষত গ্রাফে দেখতে পাচ্ছেন।

এখানে চিত্র বর্ণনা লিখুন

আমরা RANGE_HI_KEY এবং তারপরে BOOM- এ আঘাত না করা পর্যন্ত সারিগুলিতে অবিচলিত হ্রাস লক্ষ্য করুন এবং হ'ল হঠাৎ বিয়োগ করা হয়েছে। এটি কোনও গ্রাফেও সহজে দেখা যায়।

এখানে চিত্র বর্ণনা লিখুন

সংক্ষেপে বলা যায়, AVG_RANGE_ROWS এর অদ্ভুত চিকিত্সা সারি অনুমান গণনা করা আরও জটিল করে তোলে তবে সিই কী করছে তা আপনি সর্বদা মিলন করতে পারেন।

এক্সফোনেনশিয়াল ব্যাক অফ সম্পর্কে কী?

এক্সপেনশনাল ব্যাকঅফ হ'ল পদ্ধতিটি নতুন (এসকিউএল সার্ভার ২০১৪ হিসাবে) একাধিক একক-কলামের পরিসংখ্যান ব্যবহার করার সময় আরও ভাল অনুমানের জন্য কার্ডিনালিটি এসটিমেটর ব্যবহার করে। যেহেতু এই প্রশ্নটি একটি একক-কলামের স্ট্যাটাস সম্পর্কিত, এটি ইস সূত্রে জড়িত নয়।

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