国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

理解統計信息(2/6):直方圖

2024-07-21 02:47:01
字體:
來源:轉載
供稿:網友
理解統計信息(2/6):直方圖

在理解統計信息(1/6):密度向量里,我們討論了在統計里存儲的密度向量信息。這篇文章會討論下直方圖。我們再次創建SalesOrderDetail表的副本,并在上面建立2個索引。

1 USE StatisticsDB2 GO3 SELECT * INTO SalesOrderDetail FROM AdventureWorks2008r2.Sales.SalesOrderDetail4 CREATE UNIQUE CLUSTERED INDEX ix_SalesOrderDetailID ON SalesOrderDetail(SalesOrderDetailID)5 CREATE NONCLUSTERED INDEX ix_PRoductid ON SalesOrderDetail(productid)

我們來看看非聚集索引的直方圖信息。

1 DBCC SHOW_STATISTICS('dbo.SalesOrderDetail', 'ix_productid') WITH HISTOGRAM

你會在輸出里看到200條記錄,上圖只顯示了前18條記錄。為了創建直方圖,SQL Server基于索引的第一列值把數據分成不同的桶(步長)。輸出結果里每條記錄被稱為步長。基于數據分布情況,步長的最大個數是200。直方圖是你數據的統計表述(statistical representation)。換句話說,它是基于索引的第一列值的數據分布情況。直方圖總是基于索引的第一列,即使索引是組合列。這也是為什么建議把經常被選到的列(most selective column)作為索引的第一列的原因,但也有例外。我們來看直方圖的輸出結果。它是基于productid值把表里121317條記錄分成200個桶(步長)。

RANGE_HI_KEY列表示每桶的上邊界值。每桶的下邊界值是上一桶的RANGE_HI_KEY+1。對于第一桶,下邊界值是生成直方圖列的最小值。

RANGE_ROWS列表示在那桶范圍內的記錄數,但不等于RANGE_HI_KEY值。第一條記錄的0值標識,在整個表里沒有一條記錄productid值是小于707的。我們來看第11條記錄,它的RANGE_HI_KEY值是718,RANGE_ROWS列值是218。這就是說,有218條記錄的productid是大于716(上一條RANGE_HI_KEY值)且小于718的。我們可以去驗證下。

1 SELECT COUNT(*) FROM SalesOrderDetail WHERE productid>716 AND productid<718

EQ_ROWS列表示表里與RANGE_HI_KEY值匹配的記錄數。對于第一條記錄,EQ_ROWS值為3083表示表里productid值為707的記錄有3083條。我們可以驗證下。

1 SELECT COUNT(*) FROM SalesOrderDetail WHERE productid=707

DISTINCT_RANGE_ROWS列表示在2個RANGE_HI_KEY值之間的不同記錄數(不同productid值)。我們來看第11條的RANGE_HI_KEY值是718,DISTINCT_RANGE_ROWS列值為1,這就是說productid值大于716(上一個RANGE_HI_KEY值)且小于718只有1條不同記錄。我們可以驗證下。

1 SELECT COUNT(distinct productid) FROM SalesOrderDetail WHERE productid>716 AND productid<718

AVG_RANGE_ROWS列表示每個不同值的平均記錄數。如果AVG_RANGE_ROWS值大于0的話,和RANGE_ROWS / DISTINCT_RANGE_ROWS相等,不然AVG_RANGE_ROWS的值為1。

SQL Server優化器如何使用直方圖來做基數計算(cardinality estimation)呢?我們看下下面查詢的執行計劃,點擊工具欄的顯示包含實際的執行計劃。

1 SELECT productid FROM SalesOrderDetail WHERE productid>=716 AND productid<=718 

估計行數1513是怎么計算來的呢?我們看下直方圖。

紅色方框里的數字合計(1076+218+219=1513)就是執行計劃里估計行數值。

1076是productid值為716的記錄數。

218是productid值大于716且小于718的記錄數。

219是productid值等于718的記錄數。

三個值的匯總就是上述執行計劃里的估計行數。

當where條件復雜時,優化器會創建稱為列統計的統計信息,并在直方圖數據上使用復合算法(complexalgorithm)進行基數計算(cardinality estimation)。我們在下篇文章會談論這個的更多細節。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 刚察县| 凤台县| 罗山县| 玛纳斯县| 墨玉县| 米泉市| 云梦县| 侯马市| 怀柔区| 阳朔县| 五原县| 甘泉县| 绥芬河市| 开封市| 博野县| 双辽市| 玉龙| 定日县| 年辖:市辖区| 阿荣旗| 娱乐| 汤阴县| 正蓝旗| 炎陵县| 海伦市| 新巴尔虎左旗| 依安县| 海阳市| 来凤县| 仁化县| 临湘市| 江安县| 岑溪市| 平和县| 浦江县| 比如县| 中宁县| 响水县| 阳新县| 宁强县| 清徐县|