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>
相关文章
|
运维 监控 安全
数字孪生与矿业:提高开采效率
数字孪生技术在矿业领域的应用正逐步改变传统采矿模式,通过创建矿山的虚拟模型并实时集成数据,提高开采效率、优化资源利用、降低安全风险。本文深入探讨其在精准勘探、优化开采计划、实时监控与故障预警等方面的应用,以及带来的优势和典型案例。
|
11月前
|
人工智能 数据安全/隐私保护
深度揭秘CoT!普林斯顿耶鲁发布最新报告:大模型既有记忆推理、也有概率推理
普林斯顿大学和耶鲁大学研究人员发布报告,探讨链式思维(CoT)提示对大型语言模型(LLM)推理能力的影响。研究通过移位密码任务,揭示了三个关键因素:任务输出概率、预训练阶段的隐性学习及中间操作数量(噪声推理)。实验使用GPT-4、Claude 3和Llama 3.1模型,发现CoT提示可显著提升模型准确性,但也存在局限性。论文地址:https://arxiv.org/abs/2407.01687。
474 29
|
人工智能
HunyuanVideo:腾讯推出的开源视频生成模型,参数高达130亿
腾讯推出的开源视频生成模型HunyuanVideo,拥有130亿参数,是目前参数量最大的开源视频模型之一。该模型具备物理模拟、高文本语义还原度、动作一致性和电影级画质等特性,能生成带有背景音乐的视频,推动了视频生成技术的发展和应用。
644 16
HunyuanVideo:腾讯推出的开源视频生成模型,参数高达130亿
|
存储 自然语言处理 JavaScript
鸿蒙next字符串基础:掌握字符串操作与多语言支持
本文深入介绍了鸿蒙(HarmonyOS)开发中字符串处理的基础知识和高级技巧。涵盖字符串资源管理、多语言支持、基本操作(如拼接、替换、分割和大小写转换)以及在用户界面和交互中的应用。通过合理管理和使用字符串资源,提升应用的用户体验和国际化水平。
701 3
|
Rust 开发者
揭秘Rust编程:模块与包的终极对决,谁将主宰代码组织的新秩序?
【8月更文挑战第31天】在软件工程中,模块化设计能显著提升代码的可读性、可维护性和可重用性。Rust 作为现代系统编程语言,其模块和包管理机制为开发者提供了强有力的工具来组织代码。本文通过对比模块和包的概念及使用场景,探讨了 Rust 中的最佳实践。
213 2
KDD 2024:零样本即可时空预测!港大、华南理工等发布时空大模型UrbanGPT
【8月更文挑战第21天】UrbanGPT是由香港大学等机构研发的时空大模型,针对城市管理中因数据稀缺导致的预测难题,通过时空依赖编码器与指令调整技术实现强大的泛化能力。此模型能在多种城市任务中无需样本进行准确预测,如交通流量和人群流动等,有效应对数据收集难的问题,在零样本场景下表现优异,为智慧城市管理提供了有力工具。[论文](https://arxiv.org/abs/2403.00813)
306 1
|
小程序 定位技术 API
从新手到行家:支付宝小程序开发的全景攻略
【8月更文挑战第27天】在数字化转型的大潮中,支付宝小程序作为连接商家与消费者的桥梁发挥着重要作用。本文以“美食地图”支付宝小程序为例,从项目概述、开发准备、开发实践、问题解决到最终总结,全面解析支付宝小程序的开发流程。从环境搭建到页面设计,再到业务逻辑实现,最后完成性能优化、测试与发布,详细介绍如何打造一款实用且用户体验优良的小程序。“美食地图”不仅让用户轻松搜索周边美食、查看评价和优惠信息,还能在线预约,极大地提升了便利性和满意度。通过实战案例分享,为开发者提供宝贵的经验参考。
533 0
|
存储 容灾 Cloud Native
阿里云ClickHouse企业版正式商业化,为开发者提供容灾性更好、性价比更高的实时数仓
2024年4月23日,阿里云联合 ClickHouse Inc. 成功举办了企业版商业化发布会。阿里云 ClickHouse 企业版是阿里云和 ClickHouse 原厂 ClickHouse. Inc 独家合作的存算分离的云原生版本,支持资源按需弹性 Serverless,帮助企业降低成本的同时,为企业带来更多商业价值。
1024 1
|
安全 Windows
如何关闭联想杀毒Plus
如何关闭联想杀毒Plus
7232 0
如何关闭联想杀毒Plus
|
编解码 算法 安全
瑞云科技副总经理黄金进:实时云渲染是实现现实世界和虚拟世界写实视觉效果的关键
2021年12月10日,由广东省游戏产业协会、广东省虚拟现实产业技术创新联盟、深圳市科学技术协会、深圳市互联网文化市场协会指导,陀螺科技主办,深圳市科技开发交流中心、恒悦创客魔方协办,行业头部媒体游戏陀螺、VR陀螺、陀螺电竞、陀螺财经、陀螺传媒联合主办的2021未来商业生态链接大会暨第六届金陀螺奖颁奖典礼(简称“FBEC2021”)在深圳大中华喜来登酒店6楼宴会厅盛大开幕!
瑞云科技副总经理黄金进:实时云渲染是实现现实世界和虚拟世界写实视觉效果的关键