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