নীচে প্রদর্শিত সাধারণ অ্যাডভেঞ্চার ওয়ার্কস ক্যোয়ারী এবং সম্পাদন পরিকল্পনা বিবেচনা করুন । ক্যোয়ারির সাথে সংযুক্ত পূর্বাভাস রয়েছে AND
। অপ্টিমাইজারের কার্ডিনালিটির অনুমান 41,211 সারি:
-- Estimate 41,211 rows
SELECT COUNT_BIG(*)
FROM Production.TransactionHistory AS TH
WHERE
TH.TransactionID BETWEEN 100000 AND 168336
AND TH.TransactionDate BETWEEN '2007-09-01' AND '2008-03-13';
ডিফল্ট পরিসংখ্যান ব্যবহার করে
কেবলমাত্র একক-কলামের পরিসংখ্যান দেওয়া অপ্টিমাইজার প্রতিটি প্রাকটিকের জন্য আলাদাভাবে কার্ডিনালিটি অনুমান করে এবং ফলাফলকে বেছে নিয়ে একসাথে গুণ করে এই অনুমান তৈরি করে। এই হিউরিস্টিক অনুমান করে যে পূর্বাভাসগুলি সম্পূর্ণ স্বাধীন independent
ক্যোয়ারিকে দুটি ভাগে বিভক্ত করা গণনাটি দেখতে আরও সহজ করে তোলে:
-- Estimate 68,336.4 rows
SELECT COUNT_BIG(*)
FROM Production.TransactionHistory AS TH
WHERE
TH.TransactionID BETWEEN 100000 AND 168336;
লেনদেনের ইতিহাসের টেবিলটিতে মোট 113,443 টি সারি রয়েছে, সুতরাং 68,336.4 অনুমানটি এই ভবিষ্যদ্বাণীটির জন্য 68336.4 / 113443 = 0.60238533 এর একটি নির্বাচনের প্রতিনিধিত্ব করে । এই অনুমানটি TransactionID
কলামের জন্য হিস্টোগ্রাম তথ্য এবং ক্যোয়ারীতে নির্দিষ্ট করা ধ্রুবক মান ব্যবহার করে প্রাপ্ত ।
-- Estimate 68,413 rows
SELECT COUNT_BIG(*)
FROM Production.TransactionHistory AS TH
WHERE
TH.TransactionDate BETWEEN '2007-09-01' AND '2008-03-13';
এই প্রাকটিকটির 68413.0 / 113443 = 0.60306056 এর আনুমানিক নির্বাচন রয়েছে । আবার, এটি প্রাকটিকের স্থির মান এবং TransactionDate
পরিসংখ্যানের বস্তুর হিস্টগ্রাম থেকে গণনা করা হয় ।
ভবিষ্যদ্বাণীগুলি সম্পূর্ণ স্বাধীন বলে ধরে নিলে আমরা দু'জন পূর্বাভাসের একত্রে বহুগুণে বাছাই করে বেছে বেছে বেছে নিতে পারি। চূড়ান্ত কার্ডিনালিটির প্রাক্কলনটি বেস টেবিলের 113,443 সারি দ্বারা ফলাফলের নির্বাচনকে গুণিত করে প্রাপ্ত হয়:
0.60238533 * 0.60306056 * 113443 = 41210.987
রাউন্ডিংয়ের পরে, এটি মূল ক্যোয়ারিতে দেখা 41,211 টি অনুমান (অপ্টিমাইজারটি অভ্যন্তরীণভাবে ভাসমান পয়েন্ট গণিতও ব্যবহার করে)।
দুর্দান্ত অনুমান নয়
TransactionID
এবং TransactionDate
কলাম (monotonically বৃদ্ধি কী ও তারিখ কলাম ঘন ঘন হিসাবে) AdventureWorks ডেটা সেটে ঘনিষ্ঠ পারস্পরিক সম্পর্ক আছে। এই পারস্পরিক সম্পর্কের অর্থ স্বাধীনতা অনুমান লঙ্ঘিত হয়েছে। ফলস্বরূপ, মৃত্যুদন্ড কার্যকর করার পরে ক্যোয়ারী পরিকল্পনাটি অনুমানিত 41,211 এর চেয়ে 68,095 টি সারি দেখায়:
ট্রেস পতাকা 4137
এই ট্রেস পতাকাটি সক্ষম করা পূর্বাভাসগুলি একত্রিত করতে ব্যবহৃত হিউরিস্টিকগুলিকে পরিবর্তন করে। সম্পূর্ণ স্বাধীনতা ধরে নেওয়ার পরিবর্তে, অপ্টিমাইজারটি বিবেচনা করে যে দুটি পূর্বাভাসকারীদের নির্বাচন করা যথেষ্ট পরিমাণে এতোটা পারস্পরিক সম্পর্কযুক্ত হওয়ার সম্ভাবনা রয়েছে:
-- Estimate 68,336.4
SELECT COUNT_BIG(*)
FROM Production.TransactionHistory AS TH
WHERE
TH.TransactionID BETWEEN 100000 AND 168336
AND TH.TransactionDate BETWEEN '2007-09-01' AND '2008-03-13'
OPTION (QUERYTRACEON 4137);
মনে রাখবেন যে TransactionID
একা প্রাক্কলিতের অনুমান 68,336.4 সারি এবং TransactionDate
একা একা প্রাকটিক অনুমান করেছিল 68,413 সারি। অপটিমাইজার এই গুণাগুণকে গুণক করার চেয়ে এই দুটি অনুমানের চেয়ে কমটিকে বেছে নিয়েছে।
এটি অবশ্যই একটি ভিন্ন ধর্মীয় তাত্ত্বিক, তবে এটি যা সম্পর্কিত সম্পর্কিত AND
পূর্বাভাসের সাথে প্রশ্নের জন্য অনুমানকে উন্নত করতে সহায়তা করতে পারে । প্রতিটি প্রাকটিককে সম্ভাব্য পারস্পরিক সম্পর্কের জন্য বিবেচনা করা হয়, এবং অনেকগুলি AND
শৃঙ্খলা জড়িত থাকাকালীন অন্যান্য সমন্বয়ও করা হয়, তবে সেই উদাহরণটি এর মূল বিষয়গুলি দেখায়।
মাল্টি-কলামের পরিসংখ্যান
এগুলি পারস্পরিক সম্পর্কের প্রশ্নে সহায়তা করতে পারে, তবে হিস্টোগারের তথ্য এখনও সম্পূর্ণ পরিসংখ্যানের শীর্ষস্থানীয় কলামের উপর নির্ভরশীল। নিম্নলিখিত প্রার্থী বহু-কলাম পরিসংখ্যান অতএব একটি গুরুত্বপূর্ণ উপায়ে পৃথক:
CREATE STATISTICS
[stats Production.TransactionHistory TransactionID TransactionDate]
ON Production.TransactionHistory
(TransactionID, TransactionDate);
CREATE STATISTICS
[stats Production.TransactionHistory TransactionDate TransactionID]
ON Production.TransactionHistory
(TransactionDate, TransactionID);
এর মধ্যে একটি মাত্র গ্রহণ করে আমরা দেখতে পাচ্ছি যে কেবলমাত্র অতিরিক্ত তথ্য হ'ল 'সমস্ত ঘনত্বের অতিরিক্ত স্তর। হিস্টোগ্রামে এখনও TransactionDate
কলাম সম্পর্কে বিস্তারিত তথ্য রয়েছে ।
DBCC SHOW_STATISTICS
(
'Production.TransactionHistory',
'stats Production.TransactionHistory TransactionDate TransactionID'
);
এই বহু-কলামের পরিসংখ্যান স্থানে ...
SELECT COUNT_BIG(*)
FROM Production.TransactionHistory AS TH
WHERE
TH.TransactionID BETWEEN 100000 AND 168336
AND TH.TransactionDate BETWEEN '2007-09-01' AND '2008-03-13';
... কার্যকর করার পরিকল্পনাটি এমন একটি অনুমান দেখায় যা ঠিক যখন একক-কলামের পরিসংখ্যান উপলভ্য ছিল ঠিক তেমন :
Statistics objects on multiple columns also store statistical information about the correlation of values among the columns