程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQLSERVER若何檢查索引缺掉及DMV應用引見

SQLSERVER若何檢查索引缺掉及DMV應用引見

編輯:MSSQL

SQLSERVER若何檢查索引缺掉及DMV應用引見。本站提示廣大學習愛好者:(SQLSERVER若何檢查索引缺掉及DMV應用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLSERVER若何檢查索引缺掉及DMV應用引見正文


當年夜家發明數據庫查詢機能很慢的時刻,年夜家都邑想到加索引來優化數據庫查詢機能,然則面臨一個龐雜的SQL語句,找到一個優化的索引組合對人腦來說,真的不是一件很簡略的事。

好在SQLSERVER供給了兩種“主動”功效,給你建議,該怎樣調劑索引

第一種是應用DMV

第二種是應用DTA (database engine tuning advisor) 數據庫引擎優化參謀

這篇文章重要講第一種


從SQL2005今後,在SQLSERVER對任何一句語句做編譯的時刻,都邑去評價一下,

這句話是否是缺乏甚麼索引的支撐,假如他以為是,他還會預估,假如有這麽一個索引

他的機能能進步若干

SQLSERVER有幾個靜態治理視圖

sys.dm_db_missing_index_details

sys.dm_db_missing_index_groups

sys.dm_db_missing_index_group_stats

sys.dm_db_missing_index_columns(index_handle)


sys.dm_db_missing_index_details

這個DMV記載了以後數據庫下一切的missing index的信息,他針對的是SQLSERVER從啟動以來一切運轉的語句,

而不是針對某一個查詢。DBA可以看看,哪些表格SQLSERVER對他是最有“看法”的

以下是這個DMV的各個字段的說明:

1、index_handle:標識特定的缺掉索引。該標識符在辦事器中是獨一的。index_handle 是此表的密鑰

2、database_id :標識帶出缺掉索引的表所駐留的數據庫

3、object_id :標識索引缺掉的表

4、equality_columns:組成相等謂詞的列的逗號分隔列表 即哪一個字段缺掉了索引會在這裡列出來(簡略來說就是where 前面的挑選字段),

謂詞的情勢以下:table.column =constant_value

5、inequality_columns :組成不等謂詞的列的逗號分隔列表,例如以下情勢的謂詞:table.column > constant_value “=”以外的任何比擬運算符都表現不相等。

6、included_columns:用於查詢的涵蓋列的逗號分隔列表(簡略來說就是 select 前面的字段)。

7、statement:索引缺掉的表的稱號

好比上面這個查詢成果

那末應當創立如許的索引

CREATE INDEX idx_SalesOrderDetail_test_ProductID_IncludeIndex ON SalesOrderDetail_test(ProductID) INCLUDE(SalesOrderID)

在ProductID上創立索引,SalesOrderID作為包括性列的索引

留意事項:

由 sys.dm_db_missing_index_details 前往的信息會在查詢優化器優化查詢時更新,因此不是耐久化的。

缺掉索引信息只保存到從新啟動 SQL Server 前。假如數據庫治理員要在辦事器收受接管後保存缺掉索引信息,

則應按期制造缺掉索引信息的備份正本


sys.dm_db_missing_index_columns(index_handle)

前往與缺乏索引(不包含空間索引)的數據庫表列有關的信息,sys.dm_db_missing_index_columns 是一個靜態治理函數

字段說明

index_handle:獨一地標識缺掉索引的整數。


sys.dm_db_missing_index_groups

前往有關特定缺掉索引組中包括的缺掉索引(不包含空間索引)的信息


sys.dm_db_missing_index_group_stats

前往缺掉索引組的摘要信息,不包含空間索引

這個視圖說白了就是預估有這麽一個索引,他的機能能進步若干

有一個字段比擬主要:

avg_user_impact: 完成此缺掉索引組後,用戶查詢能夠取得的均勻百分比收益。該值表現假如完成此缺掉索引組,則查詢本錢將按此百分比均勻降低。

就是說,增長了這個缺掉索引,機能可以進步的百分比

上面是MSDN給出的示例,缺掉索引組句柄為 2

--查詢供給缺掉索引的數據庫、架構和表的稱號。它還供給應當用於索引鍵的列的稱號
USE [AdventureWorks]
GO
SELECT migs.group_handle, mid.*
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig
ON (migs.group_handle = mig.index_group_handle)
INNER JOIN sys.dm_db_missing_index_details AS mid
ON (mig.index_handle = mid.index_handle)
WHERE migs.group_handle = 2

示例代碼:

USE [AdventureWorks] --要查詢索引缺掉的數據庫
GO
SELECT * FROM sys.[dm_db_missing_index_details]
SELECT * FROM sys.[dm_db_missing_index_groups]
SELECT * FROM sys.[dm_db_missing_index_group_stats]
SELECT * FROM sys.[dm_db_missing_index_columns](1) --1 :1是依據dm_db_missing_index_details查出來的

我估量XX年夜俠做的SQLSERVER索引優化器也應用了"sys.dm_db_missing_index_details" 這個DMV

適才看了一下,似乎有錯別字:Total Cost不是Totol Cost

臨時不曉得Total Cost跟Improvement Measure怎麽算出來的

留意:

最初年夜家還須要留意一下,固然這些DMV給出的建議照樣比擬公道的。

然則,DBA照樣須要去確認一下建議。由於這個建議完整是依據語句自己給出的,

沒有斟酌對其他語句的影響,也沒有斟酌保護索引的本錢,所所以很單方面的。

其精確性,也要再確認一下

下面幾個DMV的字段說明,年夜家可以看一下MSDN,異常具體

sys.dm_db_missing_index_group_stats
msdn:http://msdn.microsoft.com/zh-cn/library/ms345421.aspx

sys.dm_db_missing_index_groups
msdn:http://msdn.microsoft.com/zh-cn/library/ms345407.aspx

sys.dm_db_missing_index_columns([sql_handle])
msdn:http://msdn.microsoft.com/zh-cn/library/ms345364.aspx

sys.dm_db_missing_index_details
msdn:http://msdn.microsoft.com/zh-cn/library/ms345434.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved