MySQL 中的索引数量是否越多越好?为什么?
MySQL 中的索引数量是否越多越好?为什么?
回答重点
索引并不是越多越好。因为索引不论从时间还是空间上都是有一定成本的
1)从时间上
每次对表中的数据进行增删改(INSERT、UPDATE 或 DELETE)的时候,索引也必须被更新,这会增加写入操作的开销。例如删除了一个 name 为面试鸭的记录,不仅主键索引上需要修改,如果 name 字段有索引,那么 name 索引也需要修改,所以索引越多需要修改的地方也就越多,时间开销就大了,并且 B+ 树可能会有页分裂、合并等操作,时间开销就会更大。
还有一点需要注意:MySQL 有个查询优化器,它需要分析当前的查询,选择最优的计划,这过程就需要考虑选择哪个索引的查询成本低。如果索引过多,那么会导致优化器耗费更多的时间在选择上,甚至可能因为数据的不准确而选择了次优的索引。
2)从空间上
每建立一个二级索引,都需要新建一个 B+ 树,默认每个数据页都是 16kb,如果数据量很大,索引又很多,占用的空间可不小。
扩展知识
Comments