您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
2020-07-12:什么是索引回表,如何避免?
索引,数据结构,引擎2020-07-12:什么是索引回表,如何避免?
发布时间:2016-12-08加入收藏来源:互联网点击:
问题补充: 2020-07-12:什么是索引回表,如何避免?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
首先,数据库中的索引是什么?
引用高性能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在进行二次查询,这就引发了回表问题。这就是为啥不能使用*的原因。
那么怎么解决呢?
第一不要写*。
第二利用组合索引,也就是说你根据业务实际需要,将需要的字段形成组合索引。
上一篇:浮躁的社会,应该做一个善良的人?还是,事不关己,高高挂起?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |