什么是索引回表?
首先,数据库中的索引是什么?
引用高性能mysql中的一句话:索引(mysql也叫作键(key))是存储引擎用于快速找到记录的一种数据结构。
这句话有两个点:存储引擎和数据结构。首先理解索引是在存储引擎层而非服务器层实现。而mysql分为多种存储引擎,这里我们只探讨myisam 和InnoDB。两者都支持B+Tree(一种数据结构)索引。
如果说这个理解不了,还有一个通俗易懂的方法。书都有目录,快速找到自己需要内容的方法,就是查看目录,索引就是数据库表数据的目录。
回归问题:索引引发的回表问题。索引为啥会引发回表?
下面我们来假设一种情况,一个表有三个字段 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在进行二次查询,这就引发了回表问题。这就是为啥不能使用*的原因。
那么怎么解决呢?
第一不要写*。
第二利用组合索引,也就是说你根据业务实际需要,将需要的字段形成组合索引。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有