您的位置:首页 > 其它

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

2018-01-22 15:42 134 查看
索引的一个缺点是 创建索引有开销。

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

(1)创建索引的过程

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

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

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

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

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

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

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

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

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

另一方面,会导致服务器负载过高,影响其其他业务模块,使得响应时间变长,本来一个操作只要0.5秒的,现在可能要5秒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: