এসকিউএল সার্ভার কীভাবে জানতে পারে যে পূর্বাভাসগুলি পরস্পর সম্পর্কযুক্ত?


15

এসকিউএল সার্ভার ২০০৮ এর দুর্বল কার্ডিনালিটির অনুমানের সাথে আর -2 কোয়েরিগুলি নির্ধারণ করার সময় (সাধারণ সূচীকরণ, আপ-টু-ডেট পরিসংখ্যান ইত্যাদি সত্ত্বেও) এবং ততটা খারাপ ক্যোয়ারী পরিকল্পনা, আমি সম্ভবত একটি সম্পর্কিত কেবি নিবন্ধটি পেয়েছি: ফিক্স: আপনি যখন কোনও অনুসন্ধান চালাচ্ছেন তখন খারাপ পারফরম্যান্স এতে এসকিউএল সার্ভার ২০০৮ বা এসকিউএল সার্ভার ২০০৮ আর 2 বা এসকিউএল সার্ভার ২০১২-তে সংযুক্ত এবং পূর্বাভাস রয়েছে

"অনুষঙ্গ" দ্বারা কেবি নিবন্ধটি কী বোঝায় তা অনুমান করতে পারি, উদাহরণস্বরূপ # 2 টি প্রাক্কলিত করুন এবং # 1 প্রেডিকেট মূলত একই সারিগুলিকে লক্ষ্য করুন।

তবে এসকিউএল সার্ভার এই পারস্পরিক সম্পর্কগুলির সম্পর্কে কীভাবে জানে তা আমি জানি না। কোনও টেবিলে কি উভয় পূর্বাভাসের কলামগুলি সহ একাধিক কলামের সূচক প্রয়োজন? এসকিউএল একটি কলামের মানগুলি অন্য কলামের সাথে সম্পর্কিত কিনা তা পরীক্ষা করতে পরিসংখ্যান ব্যবহার করে? বা অন্য কোন পদ্ধতি ব্যবহার করা হয়?

আমি এটি দুটি কারণে জিজ্ঞাসা করছি:

  1. এই হটফিক্সটি ব্যবহার করে আমার টেবিল এবং কোয়েরিতে কোনটি উন্নত হতে পারে তা নির্ধারণ করতে
  2. # 1 প্রভাবিত করার জন্য সূচীকরণ, পরিসংখ্যান ইত্যাদিতে আমার কী করা উচিত তা জানতে

উত্তর:


20

নীচে প্রদর্শিত সাধারণ অ্যাডভেঞ্চার ওয়ার্কস ক্যোয়ারী এবং সম্পাদন পরিকল্পনা বিবেচনা করুন । ক্যোয়ারির সাথে সংযুক্ত পূর্বাভাস রয়েছে 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';

... কার্যকর করার পরিকল্পনাটি এমন একটি অনুমান দেখায় যা ঠিক যখন একক-কলামের পরিসংখ্যান উপলভ্য ছিল ঠিক তেমন :

মাল্টি-কলাম পরিসংখ্যান পরিকল্পনা

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