章
目
录
在数据库相关的面试里,“索引是不是加得越多越好”是一个高频问题。不少同学心里可能都琢磨过这个事儿,但在面试时要是回答错了,很可能就会影响面试结果。今天咱们就来深入探讨一下这个问题。
一、面试场景与误区
想象一下这样的面试场景:面试官问你如何排查接口响应慢、SQL查询慢的问题。一般大家都会想到先查看有没有添加索引,毕竟索引能提升查询效率,这么回答没问题。可紧接着,面试官往往会追问:既然索引能提高效率,那多添加几个索引,查询不就更快了吗?这时候要是不假思索地回答“是”,面试可能就凉凉了。
二、索引过多对磁盘空间的影响
我们知道,数据库中的索引通常采用B+树结构。每添加一个索引,就相当于增加了一棵B+树。随着索引数量增多,B+树的数量也会跟着增加。而且,表中的数据是持续增长的,这会让B+树上的叶子节点越来越多。这些不断增多的叶子节点会占据越来越多的磁盘空间。就好比你在电脑里存了很多文件,文件越来越多,占用的硬盘空间也就越来越大。
三、索引过多对SQL操作效率的影响
索引多了,查询确实会更快,只要查询条件能命中索引,就能快速定位到数据。但这并不意味着索引越多就一定越好,因为索引过多会对表的增删改操作产生负面影响。
每次对表进行新增、修改或删除操作时,都需要维护所有的索引树。以新增数据为例,在B+树中,数据是按照从小到大的顺序排列的。新增一条数据时,不仅要检索它在B+树中的插入位置,插入后还可能需要重新排序。要是当前的数据页满了,还得重新创建新的数据页。这个检索、排序、创建和插入的过程会极大地降低操作性能。所以说,索引多了对查询有利,可对增删改操作就不那么友好了。
四、大厂对索引添加的规范
鉴于索引过多带来的这些问题,很多公司,尤其是大厂,对索引的添加都有严格规范。比如,一般会规定单表的索引个数不能超过3 – 5个。对于那些频繁进行增删改操作的表,更是要尽量少创建索引。在选择索引字段时,会优先考虑操作量较大或者关联数量较多的字段。
在数据库设计和优化过程中,索引的添加是个需要谨慎权衡的问题。我们不能只看到索引对查询效率的提升,还得考虑它对磁盘空间和其他操作的影响。如果大家在这方面有什么疑问或者经验,欢迎在评论区留言讨论。