mysql 索引倒序

编程入门 行业动态 更新时间:2024-10-07 11:20:56

mysql <a href=https://www.elefans.com/category/jswz/34/1771159.html style=索引倒序"/>

mysql 索引倒序

原创作者:杨涛涛

我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。

MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。

比如对于以下的查询,无法发挥索引的最佳性能。查询一:

select * from tb1 where f1 = ... order by id desc;查询二:

select * from tb1 where f1 = ... order by f1 asc , f2 desc;

那对于上面的查询,尤其是数据量和并发到一定峰值的时候,则对OS的资源消耗非常大。一般这样的SQL在查询计划里面会出现using filesort等状态。

比如针对下面的表t1,针对字段rank1有两个索引,一个是正序的,一个是反序的。不过在MySQL 8.0 之前的版本都是按照正序来存储。

按照rank1 正向排序的执行计划,

按照rank1 反向排序的执行计划,

从执行计划来看,反向比正向除了extra里多了Using temporary; Using filesort这两个,其他的一模一样。这两个就代表中间用到了临时表和排序,一般来说,凡是执行计划里用到了这两个的,性能几乎都不咋地。除非我这个临时表不太大,而用于排序的buffer也足够大,那性能也不至于太差。那这两个选项到底对性能有多大影响呢?

我们分别执行这两个查询,并且查看MySQL的session级的status就大概能看出些许不同。

<

更多推荐

mysql 索引倒序

本文发布于:2024-02-14 05:28:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762038.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:索引   mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!