MySQL中,小表该不该建索引?

本文探讨了在MySQL中,小表是否应该建立索引的问题。内容涉及索引的工作原理,B+Tree索引的特性,以及不同表大小下全表扫描与索引效率的对比。对于小表,全表扫描通常比建立索引更高效,而中到大型表则受益于索引。文章还提到了覆盖索引的概念及其优势,并讨论了索引的使用条件和分区技术在特大型表中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有情怀,有干货,微信搜索【荒古传说】关注这个不一样的程序员。

最近刚刚和泽康和素鑫聊过这个问题,这里简单整理一下。

标题中的 ‘对于非常小的表,大部分情况下简单的全表扫描比建立索引更高效’ ,其实是问题 ‘索引的使用条件’ 的答案的一部分。完整答案是:

  • 对于非常小的表、大部分情况下简单的全表扫描比建立索引更高效
  • 对于中到大型的表,索引就非常有效;

那么为什么对于非常小的表,大部分情况下简单的全表扫描比建立索引更高效呢?理由如下:

MySQL的默认存储引擎是InnoDB,在InnoDB中索引是通过 B+ 树实现的,MySQL的数据是存储在聚簇索引(聚簇索引也叫主键索引、一级索引)的叶子节点上。

在辅助索引(包括唯一索引和非唯一索引)的的叶子节点上存储着构成索引的字段和主键。

如果查询的字段不是索引的组成部分,就需要拿着从辅助索引中查到的主键值去聚簇索引中查询数据,这个过程也叫做回表。

所以,如果一个表比较小,那么显然直接遍历表比走索引要快(因为需要回表)。

注:首先,要注意这个答案隐含的条件是查询的数据不是索引的构成部分,否也不需要回表操作。其次,查询条件也不是主键,否则可以直接从聚簇索引中拿到数据。

这里有一个概念这里简单总结一下:

B+Tree 索引

是大多数 MyS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值