SQL Server 2005缺失索引的找回方案
以下的文章主要描述的是SQL Server 2005缺失索引的找回方案,在SQL Server 2005 數(shù)據(jù)庫中有幾個新的特性,其可以幫我們找回丟失一些索引,這是一些非常好的特性,但基于您的工作項,我們?nèi)绾沃佬枰⒛男┧饕?
在SQL Server 2000 ,我們不得不使用SQL事件探查器跟蹤文件和索引優(yōu)化向?qū)А?/p>
在SQL Server 2005 中有幾個新特性,可以幫助我們找回丟失的索引,這是一些非常好的特性,但基于您的工作項,我們?nèi)绾沃佬枰⒛男┧饕?
在SQL Server 2000 ,我們不得不使用SQL事件探查器跟蹤文件和索引優(yōu)化向?qū)?。但在SQL Server 2005中我們可以采用動態(tài)管理視圖(DMVs) ,就能很容易知道我們需要建立哪些索引,以利于我們的應(yīng)用程序。
以下是SQL Server 2005缺失索引相關(guān)的動態(tài)管理視圖(DMVs)和函數(shù)列表:
動態(tài)管理視圖和函數(shù)
說明
sys.dm_db_missing_index_group_stats 返回缺失索引組的摘要信息。如實現(xiàn)此缺失索引組后,系統(tǒng)查詢可能獲得的平均百分比收益;實現(xiàn)此缺失索引組后,用戶查詢可能獲得的平均百分比收益。
sys.dm_db_missing_index_groups 返回有關(guān)特定SQL Server 2005缺失索引組中包含的缺失索引的信息,如返回標識SQL Server 2005缺失索引組。
sys.dm_db_missing_index_details 返回有關(guān)缺失索引的詳細信息,如返回標識索引缺失的表;索引缺失的表的名稱;返回用于查詢的涵蓋列的逗號分隔列表。
sys.dm_db_missing_index_columns 返回有關(guān)缺失索引的數(shù)據(jù)庫表列的信息。這是動態(tài)管理函數(shù)。
以下我們以AdventureWorks 數(shù)據(jù)庫中[Person.Address] 表為例,看看如何使用上述這些動態(tài)管理函數(shù),找回缺失的索引。
通過運行以下腳本,讓我們來看看AdventureWorks 數(shù)據(jù)庫中[Person.Address] 表有哪些索引?
use AdventureWorks;
exec sp_helpindex [Person.Address]
執(zhí)行后的結(jié)果,如圖1所示:
執(zhí)行sp_helpindex后的結(jié)果
在[Person.Address]表中,我們看不到 ModifiedDate列的索引。因此我們需要執(zhí)行“sys.dm_db_missing_index_details”以查看詳細信息,在執(zhí)行這個視圖之前,我們需要先執(zhí)行以下的SQL語句:
查詢1:
- select * from Person.Address where ModifiedDate = '01/01/2008'
上面這個語句執(zhí)行后,您可能不會看到任何結(jié)果,但SQL Server的內(nèi)部將記錄下,用戶曾經(jīng)執(zhí)行了一個查詢操作和一個針對“ModifiedDate”列的索引,將在后續(xù)操作中將會用到。
查詢2:
- select * from sys.dm_db_missing_index_details:
執(zhí)行后的結(jié)果如圖2所示:
執(zhí)行sys.dm_db_missing_index_details后的結(jié)果
在上圖中,我們可以看到“equality_columns”這個字段,上圖表明 [Modified Date] 著一列的索引已經(jīng)遺失。
查詢 3:
- select db_name(d.database_id) dbname, object_name(d.object_id) tablename, d.index_handle,
- d.equality_columns, d.inequality_columns, d.included_columns, d.statement as fully_qualified_object, gs.*
- from sys.dm_db_missing_index_groups g
- join sys.dm_db_missing_index_group_stats gs on ggs.group_handle = g.index_group_handle
- join sys.dm_db_missing_index_details d on g.index_handle = d.index_handle
- where dd.database_id = d.database_id and dd.object_id = d.object_id
- and object_name(d.object_id) = 'Address'
先執(zhí)行查詢1若干次,然后執(zhí)行查詢 3
執(zhí)行查詢3后的結(jié)果
在中請大家注意“user_seeks”字段,每一次查詢,該字段都將發(fā)生變化,因為 SQL Server的不斷更新遺失索引的動態(tài)管理視圖(DMVs) 。這非常重要,基于這些信息,我們可以創(chuàng)建索引,以支持這些查詢。
針對遺失索引的動態(tài)管理視圖是SQL2005中的一個重要新功能,可以幫助我們創(chuàng)建遺失的索引。
以上的相關(guān)內(nèi)容就是對SQL Server 2005缺失索引的找回的介紹,望你能有所收獲。
【編輯推薦】
- SQL Server 2008稀疏列與列集的經(jīng)驗總結(jié)
- SQL Server 2008 FileStream支持“真功夫版”
- SQL Server 2005兩種快照隔離機制的不同之處
- SQL Server排序遇到NULL,不怕不帕!
- SQL Server獲取表的容量很簡單!