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

摘要:
在数据库上创建索引将对数据库产生负面影响。使用过滤器索引后,需要更新的索引更少。因为每次修改数据时都必须执行这些操作,所以应该删除数据库中不用于查询数据的索引。这可以减少数据库的I/O需求和数据库的大小。只有非聚集索引可以与索引的对应表一起存储在不同的文件组中。为第二个文件组创建物理文件时,必须将该文件保存到另一组物理磁盘,这样工作负载才能实际移动到不同的区域。
在一个数据库上创建索引会给数据库带来负面影响。当对表执行插入、更新和删除操作时,您就会看到这个性能的负面影响。您对表每作一次修改,包含这些修改记录的索引都必须更新,以符合最新的修改。

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

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

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

免责声明:文章转载自《修复数据库索引问题:删除索引以提升性能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IDEA 创建 web项目Python读写文件之换行符下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【MongoDB】关于Mongodb的学习与总结

 直接去看mongodb官网的文档学习是最快捷的途径。链接如下:https://docs.mongodb.com/manual/tutorial/getting-started/ 一、基础概念 Mongodb是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中应用功能最丰富的,最像关系数据库的数据库。它支持的数据结构非常松散,是类似json的bj...

linux下导入导出MySQL数据库

一、导出:用mysqldump命令行命令格式mysqldump -u 用户名 -p 数据库名 > 数据库名.sql范例:mysqldump -u root -p abc > abc.sql(导出数据库abc到abc.sql文档)提示输入密码时,输入该数据库用户名的密码。 *************************************...

Thinkphp6笔记十二:多数据库配置

一:.env配置 APP_DEBUG = true APP_TRACE = true [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = v1kcom USERNAME = root PASSWORD = root...

pandas重塑层次化索引(stack()和unstack()函数解析)

在数据处理时,有时需要对数据的结构进行重排,也称作是重塑(Reshape)或者轴向旋转(Pivot)。而运用层次化索引可为 DataFrame 的数据重排提供良好的一致性。在 pandas 中提供了实现重塑的两个函数,即 stack() 函数和 unstack() 函数。常见的数据层次化结构有两种,一种是表格,如图 1 所示;另一种是“花括号”,如图 2...

[mysql] mysqldump 导出数据库表

1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql (2)导出数据库结构(不含数据) mysqldump -u username -p -d dbname > dbname.sql (3)导出数据库中的某张数据表(包含...

Oracle等待事件分析与AWR和ASH报告_鲨鱼胃的博客程序员资料_ash报告和awr报告的区别

Oracle等待事件分析与AWR和ASH报告_鲨鱼胃的博客-程序员资料_ash报告和awr报告的区别 技术标签: 笔记  oracle  Oracle     文章目录 1 ASH和AWR 1.1 ASH 1.1.1 ash占用的内存大小 1.2 AWR 1.3 等待事件分析 1.4 MMON进程与MMNL进程 1.4.1 MMON进程 1.4....