আজকের দিনে ingালাইয়ের সরগবিলিটির পিছনের প্রক্রিয়াটিকে ডায়নামিক সিক বলে ।
এসকিউএল সার্ভার GetRangeThroughConvert
ব্যাপ্তির শুরু এবং শেষ পেতে একটি অভ্যন্তরীণ ফাংশন কল করে।
কিছুটা আশ্চর্যজনকভাবে এটি আপনার আক্ষরিক মানগুলির মতো একই পরিসীমা নয় ।
প্রতি পৃষ্ঠায় সারি এবং প্রতিদিন 1440 সারি দিয়ে একটি সারণী তৈরি করা হচ্ছে
CREATE TABLE T
(
DateTimeCol DATETIME PRIMARY KEY,
Filler CHAR(8000) DEFAULT 'X'
);
WITH Nums(Num)
AS (SELECT number
FROM spt_values
WHERE type = 'P'
AND number BETWEEN 1 AND 1440),
Dates(Date)
AS (SELECT {d '2012-12-30'} UNION ALL
SELECT {d '2012-12-31'} UNION ALL
SELECT {d '2013-01-01'} UNION ALL
SELECT {d '2013-01-02'} UNION ALL
SELECT {d '2013-01-03'})
INSERT INTO T
(DateTimeCol)
SELECT DISTINCT DATEADD(MINUTE, Num, Date)
FROM Nums,
Dates
তারপরে চলছে
SET STATISTICS IO ON;
SET STATISTICS TIME ON;
SELECT *
FROM T
WHERE DateTimeCol >= '20130101'
AND DateTimeCol < '20130102'
SELECT *
FROM T
WHERE CAST(DateTimeCol AS DATE) = '20130101';
প্রথম ক্যোয়ারীটি 1443
পড়েছে এবং দ্বিতীয়টি 2883
তাই এটি একটি অতিরিক্ত অতিরিক্ত দিন পড়ছে তারপরে এটি একটি অবশিষ্টাংশের পূর্বাভাসের বিরুদ্ধে তা ত্যাগ করে।
পরিকল্পনাটি দেখায় যে প্রতীকটি হ'ল
Seek Keys[1]: Start: DateTimeCol > Scalar Operator([Expr1006]),
End: DateTimeCol < Scalar Operator([Expr1007])
এর পরিবর্তে >= '20130101' ... < '20130102'
এটি পড়ে > '20121231' ... < '20130102'
তারপরে সমস্ত 2012-12-31
সারি ছিন্ন করে ।
এটির উপর নির্ভর করার আরেকটি অসুবিধা হ'ল কার্ডিনালিটির অনুমানগুলি প্রথাগত রেঞ্জের ক্যোয়ারির মতো সঠিক নাও হতে পারে। এটি আপনার এসকিউএল ফিডেলের একটি সংশোধিত সংস্করণে দেখা যাবে ।
টেবিলের সমস্ত 100 টি সারি এখন প্রাকটিকের সাথে মেলে (একই দিনে তারিখের সময় 1 মিনিট পৃথক করে)।
দ্বিতীয় (পরিসীমা) ক্যোয়ারীটি সঠিকভাবে অনুমান করে যে 100 টি মিলবে এবং একটি ক্লাস্টারড ইনডেক্স স্ক্যান ব্যবহার করবে। CAST( AS DATE)
ক্যোয়ারী ভুল অনুমান করেন যে শুধুমাত্র এক সারি ম্যাচ হবে এবং কী লুক-সঙ্গে একটি পরিকল্পনা তৈরি করে।
পরিসংখ্যান সম্পূর্ণ উপেক্ষা করা হয় না। যদি টেবিলের সমস্ত সারি একই থাকে datetime
এবং এটি প্রিডিকেট (যেমন 20130101 00:00:00
বা 20130101 01:00:00
) এর সাথে মিলে যায় তবে পরিকল্পনাটি একটি আনুমানিক 31.6228 সারি সহ একটি ক্লাস্টারড ইনডেক্স স্ক্যান দেখায়।
100 ^ 0.75 = 31.6228
সুতরাং যে ক্ষেত্রে এটি অনুমান এখানে সূত্র থেকে প্রাপ্ত ।
যদি টেবিলের সমস্ত সারি একই থাকে datetime
এবং এটি প্রাকটিকের সাথে মেলে না (উদাহরণস্বরূপ 20130102 01:00:00
) তবে এটি 1 এর আনুমানিক সারি গণনা এবং চেহারাগুলির সাথে পরিকল্পনায় ফিরে আসে।
যে ক্ষেত্রে টেবিলের একাধিক DISTINCT
মান রয়েছে তার অনুমানযুক্ত সারিগুলি একই রকম মনে হয় যেন কোয়েরিটি ঠিক খুঁজছিল 20130101 00:00:00
।
যদি পরিসংখ্যান হিস্টোগ্রামে কোনও পদক্ষেপ থাকে 2013-01-01 00:00:00.000
তবে অনুমানের উপর ভিত্তি করে তৈরি করা হবে EQ_ROWS
(অর্থাত্ date তারিখে অন্যান্য সময় বিবেচনা করা হবে না)। অন্যথায় যদি কোনও পদক্ষেপ না থাকে তবে দেখে মনে হচ্ছে AVG_RANGE_ROWS
এটি আশেপাশের পদক্ষেপগুলি ব্যবহার করে ।
যেমন datetime
অনেক সিস্টেমে প্রায় 3ms এর নির্ভুলতা রয়েছে সেখানে খুব কম আসল নকল মান থাকবে এবং এই সংখ্যাটি 1 হবে।