在一个数据库上创建索引会给数据库带来负面影响。当对表执行插入、更新和删除操作时,您就会看到这个性能的负面影响。您对表每作一次修改,包含这些修改记录的索引都必须更新,以符合最新的修改。 使用过滤索引后,需要更新的索引变少了。
然而,包含这些记录的索引仍然需要在记录修改时进行更新。 因为这些操作必须在每一次数据修改时进行,您应该把数据库中不用于查询数据的索引删除。这样可以减少数据库的I/O需求和数据库的大小。 为了查找不使用的索引,可以使用如下所示的查询语句去查询sys.dm_db_index_usage_stats动态管理视图。
SelectOBJECT_NAME(sys.inde……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
在一个数据库上创建索引会给数据库带来负面影响。当对表执行插入、更新和删除操作时,您就会看到这个性能的负面影响。您对表每作一次修改,包含这些修改记录的索引都必须更新,以符合最新的修改。
使用过滤索引后,需要更新的索引变少了。然而,包含这些记录的索引仍然需要在记录修改时进行更新。
因为这些操作必须在每一次数据修改时进行,您应该把数据库中不用于查询数据的索引删除。这样可以减少数据库的I/O需求和数据库的大小。
为了查找不使用的索引,可以使用如下所示的查询语句去查询sys.dm_db_index_usage_stats动态管理视图。
SelectOBJECT_NAME(sys.indexes.object_id) TableName, sys.indexes.name, sys.dm_db_index_usage_stats.user_seeks, sys.dm_db_index_usage_stats.user_scans, sys.dm_db_index_usage_stats.user_lookups, sys.dm_db_index_usage_stats.user_updates fromsys.dm_db_index_usage_stats joinsys.indexesonsys.dm_db_index_usage_stats.object_id=sys.indexes.object_id ANDsys.dm_db_index_usage_stats.index_id =sys.indexes.index_id ANDsys.indexes.name notlike‘PK%’ ANDOBJECT_NAME(sys.indexes.object_id)<>‘sysdiagrams’ wheresys.dm_db_index_usage_stats.database_id =DB_ID() and user_scans = 0 and user_scans = 0 and user_lookups = 0 and user_seeks = 0 andsys.dm_db_index_usage_stats.index_id NOTIN(0,1) ORDERBYOBJECT_NAME(sys.indexes.object_id), sys.indexes.name |
创建文件组
提高索引性能的一个重要方法是创建一个或多个文件组,以存储非聚簇索引。只有非聚簇索引能够与索引所对应的表可以存储在不同的文件组中。如果您想要在与表不同的文件组中创建一个聚簇索引,不管它是否基于主键,SQL Server都会将表移动到这个新的文件组中。
将非聚簇索引与基本表分离可以将索引的存储和I/O需求从索引对应的表转移到其他文件组中,可以减少您对索引修改操作的时间。虽然在您的数据库中使用多个文件组会增加数据库的管理负载,但是最终这个改进是值得的。
当为第二个文件组创建物理文件时,一定要将文件保存到另一组物理磁盘上,这样工作负载才能实际上转到不同的区域。如果两个物理文件都存储于同一个物理区域,那么即使您能获得一些性能提升,这个提高也不会很大。
作者
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
发现那些未被使用的数据库索引
为了确保快速访问数据,和其他关系型数据库系统一样SQL Server会利用索引来快速的查找数据。然而有太多索引的缺点是不得不维护这些索引,维护也需要代价。
-
如何为你的数据库事务日志减肥?
在大多数SQL Server的工作环境中,尤其是在OLTP环境中,数据库的事务日志性能出现瓶颈时往往会导致事务完成需要更多的时间。
-
MySQL中order by的实现和by rand() 优化
有同学上周问了个问题 “MySQL 里面的order by rand()”是怎么实现的。我们今天来简单说说MySQL里的order by。
-
Oracle TimesTen的内存结构与应用场景
TimesTen内存结构比Oracle数据库简单很多。与Oracle不同,TimesTen并没有数据库缓冲区、保存池或丢弃池的概念。