国内最专业的IT技术学习网

UI设计

当前位置:主页 > 亚博2018体育博彩 >

如何避免回表查询?什么是索引覆盖? | 1分钟

发布时间:2019/07/29标签:   索引    点击量:

原标题:如何避免回表查询?什么是索引覆盖? | 1分钟
《迅猛定位低效SQL?》留了一个尾巴:selectid,namewherename='shenjian'selectid,name,sexwherename='shenjian'多查问了一个属性,为何检索进程完整差别? 甚么是回表查问? 甚么是索引笼罩? 怎样完成索引笼罩? 哪些场景,能够应用索引笼罩来优化SQL?这些,这是明天要分享的内容。画外音:本文实验基于MySQL5.6-InnoDB。1、甚么是回表查问?这先要从InnoDB的索引完成提及,InnoDB有两大类索引: 聚拢索引(clustered index) 一般索引(secondary index)InnoDB聚拢索引和一般索引有甚么差别?InnoDB聚拢索引的叶子节点存储行记载,因而, InnoDB必需要有,且只要一个聚拢索引: 假如表界说了PK,则PK就是聚拢索引; 假如表没有界说PK,则第一个not NULL unique列是聚拢索引; 不然,InnoDB会创立一个暗藏的row-id作为聚拢索引;画外音:以是PK查问十分快,间接定位行记载。InnoDB一般索引的叶子节点存储主键值。画外音:留神,不是存储行记载头指针,MyISAM的索引叶子节点存储记载指针。举个栗子,无妨设有表:t(idPK,nameKEY,sex,flag);画外音:id是聚拢索引,name是一般索引。表中有四笔记录: 1, shenjian, m, A 3, zhangsan, m, A 5, lisi, m, A 9, wangwu, f, B两个B+树索引分辨如上图: id为PK,聚拢索引,叶子节点存储行记载; name为KEY,一般索引,叶子节点存储PK值,即id;既然从一般索引无奈间接定位行记载,那一般索引的查问进程是怎样样的呢?平日情形下,须要扫码两遍索引树。比方:select*fromtwherename='lisi';是怎样履行的呢?如粉白色门路,须要扫码两遍索引树: 先经过一般索引定位到主键值id=5; 在经过聚拢索引定位到行记载;这就是所谓的回表查问,先定位主键值,再定位行记载,它的机能较扫一遍索引树更低。2、甚么是索引笼罩(Covering index)?额,楼主并没有在MySQL的官网找到这个观点。画外音:治学谨严吧?借用一下SQL-Server官网的说法。MySQL官网,相似的说法呈现在explain查问打算优化章节,即explain的输入成果Extra字段为Using index时,可能触发索引笼罩。不论是SQL-Server官网,仍是MySQL官网,都表白了:只要要在一棵索引树上就能猎取SQL所需的全部列数据,无需回表,速率更快。3、怎样完成索引笼罩?罕见的方式是:将被查问的字段,树立到结合索引里去。还是《迅猛定位低效SQL?》中的例子:createtableuser(idintprimarykey,namevarchar(20),sexvarchar(5),index(name))engine=innodb;

上一篇:​ICMP协议全解析

下一篇:没有了

返回
版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号