索引的缺点(1):需要占用磁盘空间

  • Post author:
  • Post category:其他


索引的其中一个缺点就是需要占用磁盘空间。

这个缺点是其他 优点的基础,因为任何一种机制,不可能只有优点,而没有缺点,正因为创建索引,就是把排序后组织成B树的数据,放到磁盘上,才有了索引,才有可能运用索引的各种优势。

既然是索引,就一定会占用空间,那么这里的主要问题就成了如何减少占用的空间?

(1)减少字段个数

如果索引中包含了很多字段,比如:A表,一共有20个字段,而创建的索引中包含了10个字段,那么会导致索引占用的空间,接近于表的空间,整个索引的层数会增加,同样找一条数据,需要更多IO,速度更慢。

是否索引中真的需要包含那么多的字段?

可以从需求角度分析,本来想让索引覆盖整个查询,但实际上真正起到过滤作用的字段,也就是放到where条件中的只有2个,那么,这个索引最好就是这2个字段,其他字段,可以通过回表来获取。

(2)占用字节数少的字段

对于where 条件中的字段,不受这个限制,就算占用字节数较多,也得放到索引中。

但是对于 select count(*) from tb 这种查询,可以在占用字节数最少的字段上创建索引。

比如:A表里有很多字段,其中 ID是numeric(10),flag是 tinyint,biz_date是datetime,name是varchar(30),memo是varchar(500)。

那么可以在flag字段上创建索引,可以显著加快select count(*) from tb查询的速度,因为flag字段的类型是tinyint,只占用1个字节,所以用这个字段创建的索引,体积会很小。



版权声明:本文为yupeigu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。