मैं इस क्वेरी को AdventureWorks2012 डेटाबेस में चला रहा हूं :
SELECT
s.SalesOrderID,
d.CarrierTrackingNumber,
d.ProductID,
d.OrderQty
FROM Sales.SalesOrderHeader s
JOIN Sales.SalesOrderDetail d
ON s.SalesOrderID = d.SalesOrderID
WHERE s.CustomerID = 11077
यदि मैं अनुमानित निष्पादन योजना को देखता हूं, तो मैं निम्नलिखित देखता हूं:
प्रारंभिक सूचकांक की तलाश (शीर्ष दाएं) IX_SalesOrderHeader_CustomerID सूचकांक का उपयोग कर रहा है और शाब्दिक 11077 पर खोज कर रहा है। इसमें 2.6192 पंक्तियों का अनुमान है।
यदि मैं उपयोग करता हूं DBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAM
, तो यह दर्शाता है कि 11077 का मूल्य दो सैंपल कीज़ 11019 और 11091 के बीच है।
11019 और 11091 के बीच अलग-अलग पंक्तियों की औसत संख्या 2.619718 है, या 2.61972 के लिए गोल है जो सूचकांक की तलाश के लिए दिखाई गई अनुमानित पंक्तियों का मूल्य है।
मैं जो हिस्सा नहीं समझता वह सेल्सऑडररेल टेबल के विरुद्ध क्लस्टर इंडेक्स की तलाश के लिए पंक्तियों की अनुमानित संख्या है।
अगर मैं चला DBCC SHOW_STATISTICS ('Sales.SalesOrderDetail', 'PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID')
:
तो SalesOrderID (जिस पर मैं शामिल हो रहा हूं) का घनत्व 3.178134E-05 है। इसका मतलब है कि 1 / 3.178134E-05 (31465) SalesOrderDetail तालिका में अद्वितीय SalesOrderID मानों की संख्या के बराबर है।
यदि SalesOrderDetail में 31465 विशिष्ट SalesOrderID हैं, तो एक समान वितरण के साथ, SalesOrderID की पंक्तियों की औसत संख्या 121317 (कुल पंक्तियों की संख्या) 31465 से विभाजित होती है। औसत 3.85561 है।
इसलिए यदि पंक्तियों की अनुमानित संख्या 2.61972 है, और औसतन 3.85561 में लौटा जाना है, तो मुझे लगता है कि पंक्तियों की अनुमानित संख्या 2.61972 * 3.85561 = 10.10062 होगी।
लेकिन पंक्तियों की अनुमानित संख्या 11.4867 है।
मुझे लगता है कि दूसरे अनुमान की मेरी समझ गलत है और अलग-अलग संख्याओं से संकेत मिलता है। मैं क्या खो रहा हूँ?