数据库建立索引要考虑回表问题

这个文章我们略过很复杂的技术细节,直接告诉你怎么用,如果你有兴趣可以自己查下资料学习。

毕竟知识只有自己总结过的才是自己的。

注:我们讨论的是你的数据库引擎是InnoDB

什么是回表:

看下边的sql,其中表user 且name 建立索引

select * from user where name='张三';

这条sql 语句因为name 建立了 索引,索叶子节点是保存的主键id(你可以这样理解就是索引下边挂着注主键),然后 拿到主键id之后 在查询user 所有信息。

注意这里 拿索引下边的id 取查所有数据 叫回表。我们建立索引的时候要考虑回表的情况。

那怎么不回表呢:

看下边这个sql

select id from user where name='张三';

这样就不回表了,因为name 索引下边直接挂着id 可以直接返回id

我们说下 mysql 针对这种回表情况 有几种优化 :

1. 覆盖索引

2.最左前缀原则

3.索引下推

首先1.覆盖索引 就是我们上边这种情况 我们不讨论了

索引下推 

假设我们有一个sql 我们有一个联合索引(name,age)

select * from user where name='张三' and age=18;

正常情况下 会走索引name,   联合索引(name,age) 叶子节点会有id 然后 通过主键id查询 对比(回表) age 是否等于18。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值