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

简介: 在一个数据库上创建索引会给数据库带来负面影响。当对表执行插入、更新和删除操作时,您就会看到这个性能的负面影响。您对表每作一次修改,包含这些修改记录的索引都必须更新,以符合最新的修改。   使用过滤索引后,需要更新的索引变少了。
在一个数据库上创建索引会给数据库带来负面影响。当对表执行插入、更新和删除操作时,您就会看到这个性能的负面影响。您对表每作一次修改,包含这些修改记录的索引都必须更新,以符合最新的修改。

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

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

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

目录
相关文章
|
2月前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
75 5
|
5天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
67 0
|
1月前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因?
B+树优化了数据存储和查询效率,数据仅存于叶子节点,便于区间查询和遍历,磁盘读写成本低,查询效率稳定,特别适合数据库索引及范围查询。
46 6
|
2月前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因
B+树相较于B树,在数据存储、磁盘读写、查询效率及范围查询方面更具优势。数据仅存于叶子节点,便于高效遍历和区间查询;内部节点不含数据,提高缓存命中率;查询路径固定,效率稳定;特别适合数据库索引使用。
38 1
|
2月前
|
数据库 索引
数据库索引
数据库索引 1、索引:建立在表一列或多列的辅助对象,目的是加快访问表的数据。 2、索引的优点: (1)、创建唯一性索引,可以确保数据的唯一性; (2)、大大加快数据检索速度; (3)、加速表与表之间的连接; (4)、在查询过程中,使用优化隐藏器,提高系统性能。 3、索引的缺点: (1)、创建和维护索引需要耗费时间,随数据量增加而增加; (2)、索引占用物理空间; (3)、对表的数据进行增删改时,索引需要动态维护,降低了数据的维护速度。
48 2
|
2月前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
108 1
|
2月前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
352 1
|
2月前
|
存储 关系型数据库 数据库
Postgres数据库BRIN索引介绍
BRIN索引是PostgreSQL提供的一种高效、轻量级的索引类型,特别适用于大规模、顺序数据的范围查询。通过存储数据块的摘要信息,BRIN索引在降低存储和维护成本的同时,提供了良好的查询性能。然而,其适用场景有限,不适合随机数据分布或频繁更新的场景。在选择索引类型时,需根据数据特性和查询需求进行权衡。希望本文对你理解和使用PostgreSQL的BRIN索引有所帮助。
94 0
|
1天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
63 3