索引的缺点(2):创建索引有开销

索引的一个缺点是 创建索引有开销。

下面从创建索引的过程、对DML语句的影响两方面进行说明。


(1)创建索引的过程

创建索引,就是把表里的数据从磁盘读到内存,在内存中排序,在内存中构造B树的根、分支、叶子节点,最后写回到磁盘上。


从这个过程来看,主要的开销是消耗一定的内存,还有消耗cpu来排序操作。


当索引创建一定时间后,索引中会有很多碎片,这个时候,要对索引进行整理、重建等操作,也会有类似创建过程中的开销。


(2)索引对增删改操作的影响

在创建索引过程中,如果不断对表的数据进行增删改,会不会导致创建索引的过程,停不下来?

以前,我也有这个疑惑,后来看了相关文档、书籍,才知道创建索引的过程中,会对表加上只读锁。


也就是说,如果这个时候有DML操作,由于这个只读锁的存在,会阻塞住DML语句,直到整个索引创建完后,才能继续下去。


所以,一般创建索引的操作,建议在晚上数据库维护期间进行,特别是表中数据很大的时候,创建索引时会消耗大量内存、cpu。


一是,会阻塞,建索引的表 涉及到的业务操作。

另一方面,会导致服务器负载过高,影响其其他业务模块,使得响应时间变长,本来一个操作只要0.5秒的,现在可能要5秒。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值