Innodb:使用索引避免排序后DESC和ASC的区别

简介: Innodb:使用索引避免排序后DESC和ASC的区别

一、问题由来

这个问题是朋友提出的,大概意思就是说,Innodb 的记录中只会包含rec next的位置,那么块内部反向扫描如何完成的,比如使用索引避免排序后的DESC操作。实际上这个问题可以简单描述为Innodb 块内部是单向链表,如果要反向扫描那么是如何的。


二、相关接口

实际上对于正向和反向扫描记录使用的方法并不一致,大概的接口为:

正向:page_rec_get_next_low

这里很容易看出就是通过rec next位置来确认下一条记录,这非常容易也非常简单,代价极小。

反向:page_rec_get_prev_const

这个函数实际上可以简单的看一下就知道获取prev(上一条记录)就复杂了一些,它通过slot来进行定位,然后进行循环比对来获取上一条记录。


三、反向(DESC)大概获取流程

首先我们要清楚slot是干什么的,实际上在定位数据的时候会先定位到slot,然后再在slot内部做一个二分法。slot对于记录来讲是有序的,即逻辑上是顺序的(非物理顺序)。一个slot为2字节存储的是对应记录的偏移量,而一个slot最多包含8条记录,关于slot的讲解很多书籍都有说明,不再赘述。

好了我们假设上一次读取到的prev row = G,而slot内部包含了A、B、C、D、E、F、G 7条记录。

第一步定位到slot的开头即记录A的位置。


LOOP:设置本次 prev row = A
通过A的rec next位置获取下一条记录 B
是否 B == G
{如果是则记录prev row= A 停止循环}
否则
{继续循环,下一次循环prev row = B }

LOOP:设置本次 prev row = A

通过A的rec next位置获取下一条记录 B

是否 B == G

{如果是则记录prev row= A 停止循环}

否则

{继续循环,下一次循环prev row = B }

这个循环一直要持续到 prev row = F ,即 G == G 成立才结束。循环次数为6次。

可以看到这样上一条记录就找到了,不过看起来代价比ASC方式大了很多很多。


四、如何避免

MySQL 8的降序索引值得拥有。或者规避这个问题。


五、debug栈帧和结果

1、DESC 多次循环

image.png

2、调用栈帧

image.png

            </div>
相关文章
|
12月前
|
运维 监控 安全
数字孪生与矿业:提高开采效率
数字孪生技术在矿业领域的应用正逐步改变传统采矿模式,通过创建矿山的虚拟模型并实时集成数据,提高开采效率、优化资源利用、降低安全风险。本文深入探讨其在精准勘探、优化开采计划、实时监控与故障预警等方面的应用,以及带来的优势和典型案例。
|
12月前
|
机器学习/深度学习 人工智能 搜索推荐
AI时代下的个人发展之路:通过多栈变革实现跨越式成长
随着人工智能(AI)技术的飞速发展,企业和个人面临着前所未有的机遇和挑战。在AI时代,多栈变革成为推动企业和个人发展的关键。对企业而言,AI不仅促进了数据驱动的决策和智能自动化,还推动了产品创新和业务流程优化。而对于个人,AI的崛起提供了通过跨界学习、掌握多项技能及使用AI工具提升效率的机会。本文探讨了AI如何通过多栈变革推动企业和个人的全方位发展,同时也分析了面临的挑战与未来展望。在这个智能化、数据化的时代,只有不断学习与适应的企业和个人,才能抓住AI带来的机遇,迎接更加智能化的未来。
物联网卡不能使用在什么设备上
“物联网卡不能使用在什么设备上”这一操作或规定,通常基于物联网卡的特性、使用条款以及设备兼容性等因素。以下是对这一问题的详细分析和操作建议:
|
存储 安全 芯片
封装之打线简介
介绍封装打线的原理,常用材料的优缺点,关键部件,wire bonding 过程,主要参数,线形,线长和主要测试方法。
13400 3
封装之打线简介
|
机器学习/深度学习 人工智能 安全
智能时代的隐私守护者:AI加密技术的崛起与挑战###
本文深入探讨了人工智能(AI)在数据加密领域的创新应用,分析了AI如何增强数据安全性,同时也指出了面临的挑战和未来发展趋势。通过具体案例分析,展现了AI加密技术在保护个人隐私与促进数据安全方面的潜力,为读者提供对未来智能时代隐私保护的深刻洞见。 ###
|
消息中间件 JSON 关系型数据库
SQLServer CDC数据通过Kafka connect实时同步至分析型数据库 AnalyticDB For PostgreSQL及OSS
本文主要介绍如何通过消息对接, kafkakafka-connect数据平台以及相关插件将数据同步到分析型数据库 AnalyticDB PostgreSQL
10223 0
SQLServer CDC数据通过Kafka connect实时同步至分析型数据库 AnalyticDB For PostgreSQL及OSS
|
编解码 算法 安全
瑞云科技副总经理黄金进:实时云渲染是实现现实世界和虚拟世界写实视觉效果的关键
2021年12月10日,由广东省游戏产业协会、广东省虚拟现实产业技术创新联盟、深圳市科学技术协会、深圳市互联网文化市场协会指导,陀螺科技主办,深圳市科技开发交流中心、恒悦创客魔方协办,行业头部媒体游戏陀螺、VR陀螺、陀螺电竞、陀螺财经、陀螺传媒联合主办的2021未来商业生态链接大会暨第六届金陀螺奖颁奖典礼(简称“FBEC2021”)在深圳大中华喜来登酒店6楼宴会厅盛大开幕!
瑞云科技副总经理黄金进:实时云渲染是实现现实世界和虚拟世界写实视觉效果的关键
密钥原理,公钥和私钥的作用
说明: 下面流程图中说到的支付宝私钥是不对外开放的,商户自己的私钥也要注意保密不要对外展示,否则会影响账号安全!  一般我们会看到4个密钥      rsa_private_key              商户私钥 :        适用开发语言php ,.net等。
2028 12
|
人工智能 算法 安全
探访北京大兴国际机场,AI、5G赋能新世界七大奇迹
2019 年 9 月 25 日,被誉为「新世界 7 大奇迹」的北京大兴国际机场正式投入运营。大兴机场占地 4.1 万亩,航站楼建筑面积约 140 万平方米,相当于 63 个天安门广场。远期设计年客流吞吐量将会超过一亿人次。如此规模庞大的机场,在运营上也离不开新技术的支持。在大兴机场投入运营的第二天,机器之心就前往这里,一探「新国门」背后的技术奥秘。
682 0
探访北京大兴国际机场,AI、5G赋能新世界七大奇迹
|
弹性计算 分布式计算 Serverless
玩转阿里云函数工作流(一)——秒级定时触发器
前言 阿里云函数工作流 Function Flow(FnF),是一个用来编排分布式任务的 Serverless 云服务,方便用户将大型复杂的任务拆分为更小的子任务,用户可按需设计子任务之间的执行顺序和跳转流程,并可实时跟进子任务的执行状态和针对子任务设计错误处理。
9250 0
玩转阿里云函数工作流(一)——秒级定时触发器