一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 淺談SQL Server中統計對于查詢的影響分析

淺談SQL Server中統計對于查詢的影響分析

2019-12-16 14:49MSSQL教程網 Sql Server

SQL Server查詢分析器是基于開銷的。通常來講,查詢分析器會根據謂詞來確定該如何選擇高效的查詢路線,比如該選擇哪個索引

簡介

SQL Server查詢分析器是基于開銷的。通常來講,查詢分析器會根據謂詞來確定該如何選擇高效的查詢路線,比如該選擇哪個索引。而每次查詢分析器尋找路徑時,并不會每一次都去統計索引中包含的行數,值的范圍等,而是根據一定條件創建和更新這些信息后保存到數據庫中,這也就是所謂的統計信息。

如何查看統計信息

查看SQL Server的統計信息非常簡單,使用如下指令:

  DBCCSHOW_STATISTICS(‘表名’,’索引名’)

所得到的結果如圖1所示。

淺談SQL Server中統計對于查詢的影響分析

圖1.統計信息

統計信息如何影響查詢

下面我們通過一個簡單的例子來看統計信息是如何影響查詢分析器。我建立一個測試表,有兩個INT值的列,其中id為自增,ref上建立非聚集索引,插入100條數據,從1到100,再插入9900條等于100的數據。圖1中的統計信息就是示例數據的統計信息。

此時,我where后使用ref值作為查詢條件,但是給定不同的值,我們可以看出根據統計信息,查詢分析器做出了不同的選擇,如圖2所示。

淺談SQL Server中統計對于查詢的影響分析

圖2.根據不同的謂詞,查詢優化器做了不同的選擇

其實,對于查詢分析器來說,柱狀圖對于直接可以確定的謂詞非常管用,這些謂詞比如:

  wheredate=getdate()
  whereid=12345
  wheremonthly_sales<10000/12
  wherenamelike“Careyson”+“%”

但是對于比如

  whereprice=@vari
  wheretotal_sales>(selectsum(qty)fromsales)
  wherea.id=b.ref_id
  wherecol1=1andcol2=2

這類在運行時才能知道值的查詢,采樣步長就明顯不是那么好用了。另外,上面第四行如果謂詞是兩個查詢條件,使用采樣步長也并不好用。因為無論索引有多少列,采樣步長僅僅存儲索引的第一列。當柱狀圖不再好用時,SQL Server使用密度來確定最佳的查詢路線。

密度的公式是:1/表中唯一值的 個數。當密度越小時,索引越容易被選中。比如圖1中的第二個表,我們可以通過如下公式來計算一下密度:

淺談SQL Server中統計對于查詢的影響分析

圖3.某一列的密度

根據公式可以推斷,當表中的數據量逐漸增大時,密度會越來越小。

對于那些不能根據采樣步長做出選擇的查詢,查詢分析器使用密度來估計行數,這個公式為:估計的行數=表中的行數*密度

那么,根據這個公式,如果我做查詢時,估計的行數就會為如圖4所示的數字。

淺談SQL Server中統計對于查詢的影響分析

圖4.估計的行數

我們來驗證一下這個結論,如圖5所示。

淺談SQL Server中統計對于查詢的影響分析

圖5.估計的行數

因此,可以看出,估計的行數是和實際的行數有出入的,當數據分布均勻時,或者數據量大時,這個誤差將會變的非常小。

統計信息的更新

由上面的例子可以看到,查詢分析器由于依賴于統計信息進行查詢,那么過時的統計信息則可能導致低效率的查詢。統計信息既可以由SQL Server來進行管理,也可以手動進行更新,也可以由SQL Server管理更新時手動更新。

當開啟了自動更新后,SQL Server監控表中的數據更改,當達到臨界值時則會自動更新數據。這個標準是:

向空表插入數據時

少于500行的表增加500行或者更多

當表中行多于500行時,數據的變化量大于20%時

上述條件的滿足均會導致統計被更新。

當然,我們也可以使用如下語句手動更新統計信息。

  UPDATESTATISTICS表名[索引名]

列級統計信息

SQL Server還可以針對不屬于任何索引的列創建統計信息來幫助查詢分析器獲取“估計的行數”。當我們開啟數據庫級別的選項“自動創建統計信息”如圖6所示。

淺談SQL Server中統計對于查詢的影響分析

圖6.自動創建統計信息

當這個選項設置為True時,當我們where謂詞指定了不在任何索引上的列時,列的統計信息會被創建,但是會有以下兩種情況例外:

創建統計信息的成本超過生成查詢計劃的成本

當SQL Server忙時不會自動生成統計信息

我們可以通過系統視圖sys.stats來查看這些統計信息,如圖7所示。

淺談SQL Server中統計對于查詢的影響分析

圖7.通過系統視圖查看統計信息

當然,也可以通過如下語句手動創建統計信息:

  CREATESTATISTICS統計名稱ON表名(列名[,…n])

總結

本文簡單談了統計信息對于查詢路徑選擇的影響。過時的統計信息很容易造成查詢性能的降低。因此,定期更新統計信息是DBA重要的工作之一。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品视频久久久久 | 久久不卡免费视频 | 精品视频免费在线观看 | 国产麻豆麻豆 | 欧美亚洲桃花综合 | 欧美一区二区三区精品影视 | 亚洲xxxxxhd奶水女人 | 亚洲免费大全 | 精品国产免费久久久久久婷婷 | 国产成人综合手机在线播放 | 女上男下gifxxoo动态视频 | 美女的隐私无遮挡的网页 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 | 大香线一本 | 亚洲精品一区二区三区在线观看 | 明星裸乳照无奶罩 | 国产在线视频资源 | 韩日视频在线观看 | 日本免费一二区 | 国产一级持黄大片99久久 | 成人免费一区二区三区在线观看 | 高h视频免费观看 | 久久高清一级毛片 | 四虎com | 男女小视频在线观看 | 免费毛片 | 久久久免费观成人影院 | 天天草人人草 | chinaspanking调教 chanelpreston欧美网站 | 免费网址在线观看入口推荐 | 114毛片免费观看网站 | 热99在线观看 | 国产九九热视频 | 国产欧美日韩专区毛茸茸 | 久久se精品一区二区国产 | 国产成人免费视频 | 羞羞影院午夜男女爽爽影院网站 | 暖暖的免费观看高清视频韩国 | 欧美国产日韩在线播放 | 亚洲国产99在线精品一区69堂 | 欧美又大又粗又长又硬 |