• 自動秒收錄
  • 軟件:1973
  • 資訊:57811|
  • 收錄網站:279872|

IT精英團

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

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

瀏覽次數:
評論次數:
編輯: 溫瑜
信息來源: ITPUB
更新日期: 2022-09-13 21:46:23
摘要

簡介SQLServer查詢分析器是基于開銷的。通常來講,查詢分析器會根據謂詞來確定該如何選擇高效的查詢路線,比如該選擇哪個索引。而每次查詢分析器尋找路徑時,并不會每一次都去統計索引中包含的行數,值

  • 正文開始
  • 相關閱讀
  • 推薦作品

簡介

SQL Server查詢分析器基于開銷。一般來說,查詢分析器會根據謂詞來決定如何選擇高效的查詢路由,比如選擇哪個索引。查詢分析器每次查找路徑時,并不是每次都統計索引中包含的行數和值的范圍,而是按照一定的條件創建和更新這些信息并保存在數據庫中,這些信息稱為統計信息。

00-1010查看SQL Server的統計數據非常簡單。使用以下說明:

DBCC SHOW_STATISTICS('表名','索引名')

獲得的結果如圖1所示。

圖一。統計信息

00-1010讓我們通過一個簡單的例子來看看統計信息是如何影響query analyzer的。我設置了一個包含兩列INT值的測試表,其中id是自增的,非聚集索引設置在ref上。我從1到100插入100條數據,然后插入9900條數據等于100。圖1中的統計信息是樣本數據的統計信息。

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

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

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

其中date=getdate()

其中id=12345

其中月銷售額10000/12

像“卡雷森”這樣的名字

但是舉例來說

其中價格=@vari

其中total_sales(從sales中選擇sum(qty ))

其中a.id=b.ref_id

其中列1=1,列2=2

這個類只能在運行時知道查詢的值,所以采樣步長顯然不是那么好用。另外,在上面第四行中,如果謂詞是兩個查詢條件,就不容易使用采樣步長。因為無論索引有多少列,采樣步驟都只存儲索引的第一列。當直方圖不再有用時,SQL Server使用密度來確定最佳查詢路線。

密度的公式是:1/表中唯一值的個數。密度越小,指數越容易被選中。例如,在圖1的第二個表格中,我們可以通過以下公式計算:的密度

圖3。某一列的密度

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

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

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

    


    圖4.估計的行數

 

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

    


    圖5.估計的行數

 

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

 

統計信息的更新

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

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

  •     向空表插入數據時
  •     少于500行的表增加500行或者更多
  •     當表中行多于500行時,數據的變化量大于20%時

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

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

     

     UPDATE STATISTICS 表名[索引名]

 

列級統計信息

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

    


    圖6.自動創建統計信息

 

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

  •     創建統計信息的成本超過生成查詢計劃的成本
  •     當SQL Server忙時不會自動生成統計信息

 

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

    


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

 

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

    CREATE STATISTICS 統計名稱 ON 表名 (列名 [,...n])

 

總結

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




本文來源https://www.cnblogs.com/CareySon/archive/2012/05/14/HowStatisticImpactQuery.html

SQL Server合并(刪除)分區的歧義消除
? 上一篇 2022-09-13
國產超級大腦———rk 3568核心板!
下一篇 ? 2022-09-13
  • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
    0閱讀 0條評論 個贊
    在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
  • 國產核心板全志T507助力消防系統升級
    0閱讀 0條評論 個贊
    9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
  • 教大家如何處理Spring Boot易流中的用戶和群體!
    0閱讀 0條評論 個贊
    1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
  • 從PG15開始WAL壓縮優化
    0閱讀 0條評論 個贊
    PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
  • 深入了解美團葉子發射器開源方案
    0閱讀 0條評論 個贊
    大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
  • 卡夫卡詳解(一)——卡夫卡是什么 怎么用
    0閱讀 0條評論 個贊
    kafka是什么在回答這個問題之前,我們需要先了解另一個東西--eventstreaming。什么是eventstreaming我覺得,eventstreaming是一個動態的概念,它描述了一……
  • 與docker卷一起安裝的注意事項
    0閱讀 0條評論 個贊
    目錄Content使用數據卷(volume)使用掛載點(共享宿主目錄,bindmount)目錄兼容性可移植性目錄替代相關指定位置--volume與--mount區別鏡像保存docker-compos……
  • 碼頭工人日常工作的常用命令
    0閱讀 0條評論 個贊
    容器生命周期管理Docker創建新容器并運行[run]語法:dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]OPTIONS說明:-astdin:指定標準輸入……
  • 高手面試一個人 問4個問題就夠了
    0閱讀 0條評論 個贊
    作者|Mr.K編輯|Emma來源|技術領導力(ID:jishulingdaoli)金九銀十求職季又要來了。據統計,今年的應屆畢業生已破千萬,加上社會面存量人才,相信今年的人才季的熱度,不會低于今年……
  • 讓自己更有價值的5種能力
    0閱讀 0條評論 個贊
    如何讓自己更值錢?回答這個問題,需要用到黃金圈理論。什么是黃金圈理論?黃金圈理論,是國際知名營銷專家、作家SimonSinek在2011年提出的,這是一種由內向外的思維模式。黃金圈理論提倡由Why、……
  • 當我們在并行學習的時候 我們到底在學習什么?
    0閱讀 0條評論 個贊
    大家好,我是鲏。前段時間,星球里一位朋友問我:魚皮,高并發項目牽扯的知識有哪些?之前看到的一個回答:既要解決性能的問題又要考慮業務完整性,還有網絡資源、服務器資源等,我不太能理解,希望魚皮細說。我就簡……
  • 2022數字技能職業教育生態研討會
    9閱讀 0條評論 個贊
    職業教育是國民教育體系和人力資源開發的重要組成部分。發展職業教育,已經成為世界各國應對經濟、社會、人口、環境、就業等方面挑戰,實現可持續發展的重要戰略選擇。中國職業教育源遠流長,師徒制教學有著悠久的……
  • SQL Server聯接方式
    0閱讀 0條評論 個贊
    0.參考文獻MicrosoftSQLServer企業級平臺管理實踐看懂SqlServer查詢計劃1.測試數據準備參考:SqlServer中的表訪問方式TableScan,IndexScan……
  • [設計模式] Java設計模式-橋模式
    0閱讀 0條評論 個贊
    目錄【設計模式】Java設計模式-橋接模式簡介橋接模式實例代碼示例①、品牌接口②、汽車品牌③、抽象汽車類④、汽車類型子類⑤、橋接模式測試1|1簡介橋接(Bridge)是用于把抽象化與實現化解耦,使……
  • 開發者如何在應用后臺直接控制用戶的運動狀態?
    18閱讀 0條評論 個贊
    酷暑終于過去,很多人伴著涼爽的秋風開啟了新一輪的健身計劃。當用戶進行戶外運動或使用跑步機、橢圓機等器械時,他們會希望在運動健康類App里點擊即可開啟運動并記錄運動數據。而對于開發者自己開發的應用來說,……
  • Velox簡介:一個開源的統一執行引擎
    0閱讀 0條評論 個贊
    ?Meta正在引入Velox,這是一個開源的統一執行引擎(unifiedexecutionengine),旨在加速數據管理系統和簡化其開發。?Velox正在積極開發中,Meta在2022……
  • 大促銷活動如何抵御高流量DDoS攻擊?
    0閱讀 0條評論 個贊
    大促活動如何抵御大流量DDoS攻擊?每一次活動大促帶來的迅猛流量,對技術人而言都是一次嚴峻考驗。如果在活動期間遭受黑產惡意DDoS攻擊,無疑是雪上加霜。電商的特性是業務常態下通常不會遭受大流量DD……
  • MySQL查詢性能優化指數下推的七大武器
    0閱讀 0條評論 個贊
    前面已經講了MySQL的其他查詢性能優化方式,沒看過可以去了解一下:MySQL查詢性能優化七種武器之索引潛水MySQL查詢性能優化七種武器之鏈路追蹤今天要講的是MySQL的另一種查詢性能優化方式—索……
  • SQL Server 2005分區模板和實例
    0閱讀 0條評論 個贊
    一、場景這一段時間使用SQLServer2005對幾個系統進行表分區,這幾個系統都有一些特點,比如數據庫某張表持續增長,給數據庫帶來了很大的壓力?,F在假如提供一臺新的服務器,那么我們應該如何規劃……
  • 訂單超時案例的RabbitMQ實現
    0閱讀 0條評論 個贊
    前言#人間清醒目錄前言業務場景JUC(DelayQueue)方案DelayQueue簡介JUCDelayQueue實現訂單超時案例代碼案例代碼RedisKey過期事件方案簡介RabbitKey……
  • MySQL性能調優和優化技術
    0閱讀 0條評論 個贊
    介紹MySQL是一種流行的開源數據庫應用程序,它以一種有意義且易于訪問的方式存儲和構造數據。對于大型應用程序,龐大的數據量可能會導致性能問題。本指南提供了一些關于如何提高MySQL數據庫性能的調……
  • 記錄在線超時的分析和故障排除過程
    0閱讀 0條評論 個贊
    .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
  • 如何使用helm優雅地安裝prometheus-operator并監控k8s集群微服務
    0閱讀 0條評論 個贊
    前言:隨著云原生概念盛行,對于容器、服務、節點以及集群的監控變得越來越重要。Prometheus作為Kubernetes監控的事實標準,有著強大的功能和良好的生態。但是它不支持分布式,不支持數據……
  • 基于ASP.NET核心6.0的簡潔架構
    0閱讀 0條評論 個贊
    背景最近嘗試錄制了一個系列視頻:《ASP.NETCore6.0+Vue.js3實戰開發》,本節是視頻內部整潔架構的理論和實戰的文字稿。因為在錄制之前,我通常會編寫完整的文字內容作為視頻文案,這……
  • 基于 網絡6的輕量級Webapi框架緊固點
    0閱讀 0條評論 個贊
    大家好,我是等天黑。FastEndpoints是一個基于.NET6開發的開源webapi框架,它可以很好地替代.NETMinimalAPIs和MVC,專門為開發效率而生,帶來了全……
最近發布資訊
更多
十八禁试看120秒做受