索引的缺点(4):过多的索引会降低性能
2018-01-23 13:18
393 查看
创建索引的目的是为了加快查询速度,但是任何事情都是过犹不及的。
如果建的索引太多,反而会降低性能。
(1)多少索引算多?
先说个真实的事。
前几年的时候,有一次写一个简单的sql,觉得查的很慢,想想是不是少了索引。
于是打开ssms客户端,点开表下面的索引,发现这个表尽然有100多个索引,当时就懵了。。。
这100多个索引,实在是太多了,同时也说明这个数据库没有DBA管理,很混乱,这个可能是更大的问题。
一般情况下,一个表的索引,个人觉得5个左右,这个具体的数量,可以进行实际的测试,如果索引多了,觉得插入慢,可以减少,或者合并索引。
(2)通过监控,删除不用的多余索引
删除只有user_updates的,但user_seeks为0的。
select
DB_NAME(d.database_id),
OBJECT_NAME(d.object_id),
i.name,
user_seeks,
user_scans,
user_lookups,
user_updates --通过用户查询执行的更新次数
from sys.dm_db_index_usage_stats d
inner join sys.indexes i
on d.object_id = i.object_id
and d.index_id = i.index_id
where database_id = DB_ID('数据库名')
(3)找到低效索引
找到user_updates比较大,而user_seek、user_scan很小的索引,分析一下为什么有维护的开销,而实际索引使用次数较少,是不是索引建的不合理,其中的字段顺序、个数都不对。
如果建的索引太多,反而会降低性能。
(1)多少索引算多?
先说个真实的事。
前几年的时候,有一次写一个简单的sql,觉得查的很慢,想想是不是少了索引。
于是打开ssms客户端,点开表下面的索引,发现这个表尽然有100多个索引,当时就懵了。。。
这100多个索引,实在是太多了,同时也说明这个数据库没有DBA管理,很混乱,这个可能是更大的问题。
一般情况下,一个表的索引,个人觉得5个左右,这个具体的数量,可以进行实际的测试,如果索引多了,觉得插入慢,可以减少,或者合并索引。
(2)通过监控,删除不用的多余索引
删除只有user_updates的,但user_seeks为0的。
select
DB_NAME(d.database_id),
OBJECT_NAME(d.object_id),
i.name,
user_seeks,
user_scans,
user_lookups,
user_updates --通过用户查询执行的更新次数
from sys.dm_db_index_usage_stats d
inner join sys.indexes i
on d.object_id = i.object_id
and d.index_id = i.index_id
where database_id = DB_ID('数据库名')
(3)找到低效索引
找到user_updates比较大,而user_seek、user_scan很小的索引,分析一下为什么有维护的开销,而实际索引使用次数较少,是不是索引建的不合理,其中的字段顺序、个数都不对。
相关文章推荐
- 索引的缺点(3):降低增删改的性能
- OGG案例分享:由于表缺少唯一性索引导致DML操作性能降低
- SQL Server-聚焦过滤索引提高查询性能
- 高并发高负载性能和解决方案资源索引
- MySQL 数据库性能优化之索引优化
- 使用 SQL Server 2000 索引视图提高性能
- MongoDB性能篇 - 索引,explain执行计划,优化器profile,性能监控mongosniff
- 【数据操作】优化SQL server性能 之 索引
- Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
- 【MySQL】性能优化之 覆盖索引
- 解析一个通过添加本地分区索引提高SQL性能的案例
- 反射是否真的会让你的程序性能降低?
- 利用复合索引解决性能问题一例
- paip.提升性能---C#.NET程序内存占用过多以及OutOfMemory解决方法
- SQL Server 2005 性能优化实战系列(文章索引)
- 剖析数据库性能调优技术之索引调优
- mysql性能优化(利用索引优化查询速度)
- MySQL 5.5 分区性能测试之索引使用情况
- mysql数据库性能优化(包括SQL、表结构、索引和缓存参数)
- mysql性能优化-慢查询分析、优化索引和配置