2020-07-12:什么是索引回表,如何避免?

4年前 (2021-06-07)阅读871回复0
超市单页
超市单页
  • 管理员
  • 发消息
  • 注册排名703
  • 经验值40
  • 级别管理员
  • 主题8
  • 回复0
楼主

首先,数据库中的索引是什么?

引用高性能mysql中的一句话:索引(mysql也叫作键(key))是存储引擎用于快速找到记录的一种数据结构。

2020-07-12:什么是索引回表,如何避免?

这句话有两个点:存储引擎和数据结构。首先理解索引是在存储引擎层而非服务器层实现。而mysql分为多种存储引擎,这里我们只探讨myisam 和InnoDB。两者都支持B+Tree(一种数据结构)索引。

如果说这个理解不了,还有一个通俗易懂的方法。书都有目录,快速找到自己需要内容的方法,就是查看目录,索引就是数据库表数据的目录。

2020-07-12:什么是索引回表,如何避免?

回归问题:索引引发的回表问题。索引为啥会引发回表?

下面我们来假设一种情况,一个表有三个字段 ID ,name ,age,将ID设置成主键索引,name设成辅助索引。

然后来看一下下面的sql:

1.select * from t where id='5';

2.select * from t where name='张三';

两个很简单的Sql。

第一个sql不用说,直接通过主键索引,从树上直接可以得到结果。

第二个sql:首先name,mysql并不能得到所有列的信息(也就是*),只能得到主键ID,然后会根据ID在进行二次查询,这就引发了回表问题。这就是为啥不能使用*的原因。

那么怎么解决呢?

第一不要写*。

第二利用组合索引,也就是说你根据业务实际需要,将需要的字段形成组合索引。

0
0
收藏0
回帖

2020-07-12:什么是索引回表,如何避免? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息