站长论坛
标题:
SQL Server 2005 显示索引使用情况
[打印本页]
作者:
sunhw0725
时间:
2008-10-7 17:19
标题:
SQL Server 2005 显示索引使用情况
与查询性能调优相似,在数据库中创建有用的索引经常是艺术和科学的结合。在加速SELECT查询的同时,索引减慢了数据的修改。必须平衡读取活动与数据修改活动带来的索引开销的代价/受益。每一个增加到表中的索引都会以数据修改速度为代价改善查询性能。在这之上,索引的效能会随着数据的改变而改变,由此几个星期前索引还是有用的,今天可能就没用了。在SQL Server 2000中最大的困难之一是找出哪一个索引没被使用——从来都不使用或很少使用。这是重要的,因为增加索引减慢更新速度。如果想在表中创建索引,则它们应该在高优先级的查询中很好地使用。如果SQL Server没有使用某个索引,它就是静负荷。
现在在SQL Server 2005中,可以通过查询动态管理视图sys.dm_db_index_usage_stats查看索引是否被使用。这个视图从SQL Server实例上次重启以后返回有关索引查找、扫描、更新或查找的次数的统计信息。它也返回引用索引的最后的时间。
在这个示例中,查询动态管理视图sys.dm_db_index_usage_stats去查看表Sales.Customer中的索引是否被使用过。在引用sys.dm_db_index_usage_stats之前,要在表Sales.Customer上执行两个查询,第一个返回所有的行和列,第二个返回具有指定的TerritoryID的列AccountNumber:
在执行完查询之后,查询动态管理视图sys.dm_db_index_usage_stats:
它返回:
解析
动态管理视图sys.dm_db_index_usage_stats允许查看SQL Server实例使用了哪个索引。在最后一次SQL Server重启之后统计信息才生效。
在这个技巧中,在表Sales.Customer上执行两个查询。在执行完查询后,查询动态管理视图sys.dm_db_index_usage_stats。
SELECT子句显示了索引的名称、用户查找和用户扫描的次数以及用户最后查找和最后扫描的时间:
FROM子句通过object_id和index_id将动态管理视图sys.dm_db_index_usage_stats联结到系统目录视图sys.indexes上(所以索引名应该显示在结果中):
WHERE子句限定只显示数据库AdventureWorks上的索引以及表Sales.Customer上的索引。DB_ID函数用来返回数据库系统ID,OBJECT_ID函数用来得到表的对象ID:
查询返回两行,显示表Sales.Customer的聚集索引PK_Customer_CustomerID最近被访问过(很可能是通过第一个SELECT *查询),并且第二个查询(限定了TerritoryID = 4)使用了非聚集索引IX_Customer_TerritoryID。
索引帮助提高了查询性能,但也增加了磁盘空间和数据修改的开销。使用动态管理视图sys.dm_db_index_usage_stats,可以监视索引是否真的被使用,如果没有,则把它们替换为更有效的索引。
欢迎光临 站长论坛 (http://tzlink.com/bbs/)
Powered by Discuz! X3.2