修复数据库索引问题:删除索引以提升性能

系统 1753 0
在一个数据库上创建索引会给数据库带来负面影响。当对表执行插入、更新和删除操作时,您就会看到这个性能的负面影响。您对表每作一次修改,包含这些修改记录的索引都必须更新,以符合最新的修改。

  使用过滤索引后,需要更新的索引变少了。然而,包含这些记录的索引仍然需要在记录修改时进行更新。

  因为这些操作必须在每一次数据修改时进行,您应该把数据库中不用于查询数据的索引删除。这样可以减少数据库的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需求从索引对应的表转移到其他文件组中,可以减少您对索引修改操作的时间。虽然在您的数据库中使用多个文件组会增加数据库的管理负载,但是最终这个改进是值得的。

  当为第二个文件组创建物理文件时,一定要将文件保存到另一组物理磁盘上,这样工作负载才能实际上转到不同的区域。如果两个物理文件都存储于同一个物理区域,那么即使您能获得一些性能提升,这个提高也不会很大。

修复数据库索引问题:删除索引以提升性能


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论