数据库-统计信息相关资料
前言:最近數(shù)據(jù)庫(kù)突然變得卡頓,查看了相關(guān)日志后,推測(cè)可能是索引碎片以及統(tǒng)計(jì)信息的問(wèn)題,索引碎片很久之前已經(jīng)寫(xiě)了個(gè)job定時(shí)處理,應(yīng)該是跟統(tǒng)計(jì)信息的有關(guān),所以寫(xiě)個(gè)隨筆記錄下相關(guān)的資料。
什么是統(tǒng)計(jì)信息
? ? ? ?對(duì)于同一句話(huà),SQL SERVER 有很多種方法來(lái)完成它。有些方法適合于數(shù)據(jù)量比較小的時(shí)候,有些方法適合于數(shù)據(jù)量比較大的時(shí)候。同一種方法,在數(shù)據(jù)量不同的時(shí)候,復(fù)雜度會(huì)有非常大的差別。索引只能幫助SQL SERVER找到符合條件的記錄。SQL? SERVRE 還需要知道每一種操作所要處理的數(shù)據(jù)量有多少,從而估算出復(fù)雜度,選取一個(gè)代價(jià)最小的執(zhí)行計(jì)劃。說(shuō)得通俗一點(diǎn),SQL SERVR要能夠知道數(shù)據(jù)是“長(zhǎng)得什么樣”的,才能用最快的方法完成指令。怎么能夠讓SQL SERVER知道數(shù)據(jù)的分布信息呢?在數(shù)據(jù)庫(kù)管理系統(tǒng)里有個(gè)常用的技術(shù),就是數(shù)據(jù)的“統(tǒng)計(jì)信息”(STATISTICS)。
? ? ? 查詢(xún)優(yōu)化器使用統(tǒng)計(jì)信息來(lái)創(chuàng)建可提高查詢(xún)性能的查詢(xún)計(jì)劃。對(duì)于大多數(shù)查詢(xún),查詢(xún)優(yōu)化器已經(jīng)為高質(zhì)量的查詢(xún)計(jì)劃生成必要的統(tǒng)計(jì)信息;查詢(xún)優(yōu)化的統(tǒng)計(jì)信息是二進(jìn)制大對(duì)象(BLOB),其包含關(guān)于表或索引視圖的一個(gè)或多個(gè)列中的值的分布的統(tǒng)計(jì)信息。查詢(xún)優(yōu)化程序使用這些統(tǒng)計(jì)信息來(lái)估計(jì)查詢(xún)結(jié)果中的基數(shù)或行數(shù)。這些基數(shù)估算使查詢(xún)優(yōu)化器能夠創(chuàng)建高質(zhì)量的查詢(xún)計(jì)劃。例如,根據(jù)您的謂詞,查詢(xún)優(yōu)化器可以使用基數(shù)估計(jì)來(lái)選擇索引查找運(yùn)算符,而不是資源密集程度更高的索引掃描運(yùn)算符,如果這樣做可以提高查詢(xún)性能。每個(gè)統(tǒng)計(jì)對(duì)象都在一個(gè)或多個(gè)表列的列表上創(chuàng)建,并包含顯示第一列中值分布的直方圖。多列上的統(tǒng)計(jì)對(duì)象還存儲(chǔ)關(guān)于列之間的值的相關(guān)性的統(tǒng)計(jì)信息。這些相關(guān)統(tǒng)計(jì)信息或密度是從不同行列值的數(shù)量中導(dǎo)出的。
?
查看統(tǒng)計(jì)信息
DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target ) [ WITH [ NO_INFOMSGS ] < option > [ , n ] ] < option > :: = STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM View Code上面的sql可根據(jù)需求查詢(xún)對(duì)應(yīng)的統(tǒng)計(jì)信息,詳細(xì)可點(diǎn)擊查看微軟文檔
查得信息后,可參考這篇博客:統(tǒng)計(jì)信息含義
統(tǒng)計(jì)信息自動(dòng)更新規(guī)則
1、如果統(tǒng)計(jì)信息是定義在變通表格上的,那么當(dāng)發(fā)生下面變化之一后,統(tǒng)計(jì)信息就被認(rèn)為是過(guò)時(shí)的,下次使用時(shí),會(huì)自動(dòng)觸發(fā)一個(gè)更新動(dòng)作。
(1)表格從沒(méi)有數(shù)據(jù)變成有大于等于1條數(shù)據(jù)
(2)對(duì)于數(shù)據(jù)量小于500行的表格,當(dāng)統(tǒng)計(jì)信息的第一個(gè)字段數(shù)據(jù)累計(jì)變化大于500以后。
(3)對(duì)于數(shù)據(jù)量大于500行的表格,當(dāng)統(tǒng)計(jì)信息的第一個(gè)字段數(shù)據(jù)累計(jì)變化量大于500 + (20%)
2、臨時(shí)表(temp table) 上可以有統(tǒng)計(jì)信息。其維護(hù)策略基本和普通表格一致。但是表變量(table variable) 上不能建統(tǒng)計(jì)信息。
?這樣的維護(hù)策略能夠保證花費(fèi)比較小的代價(jià),確保統(tǒng)計(jì)信息基本正確。后面會(huì)有安例,反映這個(gè)維護(hù)策略在數(shù)據(jù)分布特殊的表上,也有可能造成一些負(fù)面的影響。
何時(shí)創(chuàng)建統(tǒng)計(jì)信息
查詢(xún)優(yōu)化器已經(jīng)通過(guò)以下方式創(chuàng)建統(tǒng)計(jì)信息:
查詢(xún)優(yōu)化程序在創(chuàng)建索引時(shí)為表或視圖上的索引創(chuàng)建統(tǒng)計(jì)信息。這些統(tǒng)計(jì)信息是在索引的鍵列上創(chuàng)建的。如果索引是篩選索引,則查詢(xún)優(yōu)化程序會(huì)針對(duì)篩選索引指定的相同行子集創(chuàng)建篩選統(tǒng)計(jì)信息。有關(guān)篩選索引的詳細(xì)信息,請(qǐng)參閱創(chuàng)建篩選索引和CREATE INDEX(Transact-SQL)。
當(dāng)AUTO_CREATE_STATISTICS打開(kāi)時(shí),查詢(xún)優(yōu)化程序?yàn)椴樵?xún)謂詞中的單個(gè)列創(chuàng)建統(tǒng)計(jì)信息。
對(duì)于大多數(shù)查詢(xún),這兩種創(chuàng)建統(tǒng)計(jì)信息的方法可確保高質(zhì)量的查詢(xún)計(jì)劃;?在少數(shù)情況下,您可以通過(guò)使用CREATE STATISTICS語(yǔ)句創(chuàng)建其他統(tǒng)計(jì)信息來(lái)改進(jìn)查詢(xún)計(jì)劃。這些附加統(tǒng)計(jì)信息可以捕獲查詢(xún)優(yōu)化程序在為索引或單列創(chuàng)建統(tǒng)計(jì)信息時(shí)不會(huì)考慮的統(tǒng)計(jì)關(guān)聯(lián)。您的應(yīng)用程序可能在表數(shù)據(jù)中具有其他統(tǒng)計(jì)相關(guān)性,如果計(jì)算到統(tǒng)計(jì)對(duì)象中,則可以使查詢(xún)優(yōu)化程序能夠改進(jìn)查詢(xún)計(jì)劃。例如,對(duì)查詢(xún)謂詞列的數(shù)據(jù)行子集或多列統(tǒng)計(jì)信息的篩選統(tǒng)計(jì)信息可能會(huì)改進(jìn)查詢(xún)計(jì)劃。
使用CREATE STATISTICS語(yǔ)句創(chuàng)建統(tǒng)計(jì)信息時(shí),建議保持AUTO_CREATE_STATISTICS選項(xiàng),以便查詢(xún)優(yōu)化器繼續(xù)定期為查詢(xún)謂詞列創(chuàng)建單列統(tǒng)計(jì)信息。有關(guān)查詢(xún)謂詞的詳細(xì)信息,請(qǐng)參閱搜索條件(Transact-SQL)。
當(dāng)滿(mǎn)足以下任何條件時(shí),請(qǐng)考慮使用CREATE STATISTICS語(yǔ)句創(chuàng)建統(tǒng)計(jì)信息:
- 數(shù)據(jù)庫(kù)引擎優(yōu)化顧問(wèn)建議創(chuàng)建統(tǒng)計(jì)信息。
- 查詢(xún)謂詞包含多個(gè)不在同一索引中的相關(guān)列。
- 查詢(xún)從數(shù)據(jù)子集中進(jìn)行選擇。
- 該查詢(xún)?nèi)鄙俳y(tǒng)計(jì)信息。
詳細(xì)的信息可參考:SQL文檔-統(tǒng)計(jì)信息
?
轉(zhuǎn)載于:https://www.cnblogs.com/9284chc0r0ij/p/10999382.html
總結(jié)
以上是生活随笔為你收集整理的数据库-统计信息相关资料的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 工单系统的设计与实现(3)
- 下一篇: 第二次Java作业2