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


















