全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

在Mysql中,什么是回表,什么是覆盖索引,索引下推?

发布时间:2023-10-14 15:21:58
发布人:xqq

一、在Mysql中,回表是什么

在MySQL中,回表(Index Lookups)是指在使用非聚集索引(Secondary Index)进行查询时,MySQL需要根据该索引的键值去聚集索引(Primary Index)中查找对应的数据行的过程。

举例来说,假设有一个包含姓名和年龄的表,并在姓名字段上创建了非聚集索引。当使用姓名索引进行查询时,MySQL会首先在该索引中定位到满足条件的记录的主键值,然后再根据这些主键值去聚集索引(通常是主键索引)中查找对应的数据行。这个额外的查找聚集索引的过程就是回表。

回表操作可能导致额外的IO开销,影响查询性能,特别是当查询的列不包含在非聚集索引中时。为了优化查询性能,可以使用覆盖索引(Covering Index)和索引下推(Index Condition Pushdown)技术来避免回表操作,提高查询效率。

二、什么是覆盖索引,索引下推

覆盖索引是指在查询语句中,所需的数据都可以从索引中获取,而不需要再去聚集索引中查找。这样就避免了回表操作,从而提高了查询性能。当查询的列都包含在索引中时,MySQL可以直接从索引中获取数据,无需再访问聚集索引。

例如,对于上面的例子,如果查询语句只需要获取姓名字段的值,而姓名字段在姓名索引中已经包含,那么MySQL可以直接从姓名索引中获取数据,而无需回表查找。

索引下推是MySQL 5.6版本引入的一项优化技术。它允许在非聚集索引中进行更多的过滤操作,减少回表次数。索引下推将查询过滤条件下推到非聚集索引层级,只有符合过滤条件的行才会去查找聚集索引。

例如,对于上面的例子,如果查询语句既需要获取姓名字段的值,又需要获取年龄字段的值,并且同时有姓名和年龄的索引,那么MySQL可以在姓名索引层级先过滤出符合姓名条件的记录,然后再根据年龄条件去聚集索引中查找对应的数据行。这样就减少了回表的次数,提高了查询性能。

延伸阅读

回表会造成什么

性能下降:回表操作涉及额外的IO操作,需要访问聚集索引来获取完整的数据行,导致查询性能下降。特别是在大规模数据表上或高并发的查询场景下,回表操作可能会成为性能瓶颈。增加数据库负载:回表操作会引起额外的数据库负载,包括磁盘读取和内存消耗。当频繁进行回表操作时,可能会导致数据库服务器的负载过高,影响整体性能。降低查询效率:由于回表需要额外的IO访问,查询的速度变慢,从而降低了查询效率,影响了用户体验。增加网络开销:如果数据库服务器和应用服务器位于不同的节点或机器上,回表操作会增加网络开销,进一步影响查询性能。
#it技术干货

相关文章

什么是类,什么是对象?

什么是类,什么是对象?

2023-10-14
什么是DHCP服务器?

什么是DHCP服务器?

2023-10-14
什么是IA架构服务器?

什么是IA架构服务器?

2023-10-14
while(1) 和 for(;;)有什么区别?

while(1) 和 for(;;)有什么区别?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取