新特性解读 | MySQL 8.0 索引特性3 -倒序索引

倒排索引(反向索引) 倒排索引(Inverted Index)是搜索引擎和数据库管理系统中常用的一种数据结构,用于快速检索文档集合中的文档。在全文搜索场景中,倒排索引是一种非常高效的手段,因为它能够快速定位到包含特定关键词的所有文档。 阅读详情

作者:杨涛涛

 

我们今天来介绍下 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就大概能看出些许不同。

通过以上两张图,我们发现反向的比正向的多了很多个计数,比如通过扫描的记录数增加了10倍,而且还伴有10倍的临时表的读和写记录数。那这个开销是非常巨大的。那以上的查询是在MySQL 5.7 上运行的。

 

MySQL 8.0 给我们带来了倒序索引(Descending Indexes),也就是说反向存储的索引。 这里不要跟搜索引擎中的倒排索引混淆了,MySQL这里只是反向排序存储而已。不过这个倒序存储已经解决了很大的问题。我们再看下之前在MySQL 5.7 上运行的例子。

 

我们把数据导入到MySQL 8.0,

再把原来的索引变为倒序索引,

再次看下第二个SQL的查询计划, 

很显然,用到了这个倒序索引 idx_rank1_desc,而这里的临时表等的信息消失了。

 

当然了,这里的组合比较多,比如我这张表的字段rank1,rank2两个可以任意组合。

  • 组合一:

(rank1 asc,rank2 asc);
  • 组合二:
(rank1 desc,rank2 desc);
  • 组合三:
(rank1 asc,rank2 desc);
  • 组合四:
(rank1 desc,rank2 asc);

我把这几个加上,适合的查询比如:

  • 查询一:

Select * from t1 where rank1 = 11 order by rank2;
  • 查询二:
Select * from t1 where 1 order by rank1,rank2;
  • 查询三:
Select * from t1 where 1 order by rank1 desc,rank2;

...

等等,这里就不一一示范了。

别再死记硬背了!我用ChatGPT+MySQL,5分钟帮你搞定面试官最爱问的10个索引问题 本文介绍如何利用ChatGPT和MySQL在5分钟内高效掌握面试官最常问的10个索引问题。通过AI辅助学习法,结合真实案例分析,帮助求职者深入理解索引原理,避免死记硬背,提升面试表现。文章还提供了实战案例和优化建议,助力技术面试成功。 阅读详情

相关推荐

CentOS 8 安装 MySQL 8.0 官方版完整指南

MySQL 是一种广泛使用的关系型数据库管理系统,其安装与配置在不同 Linux 发行版中存在显著差异。CentOS 8 因软件包治理策略调整,默认以 MariaDB 替代 MySQL,导致直接执行 dnf install mysql-server 失败。理解这一生态变迁是解决 'Unit not found'、'Error 2003' 等高频问题的前提。MySQL 8.0 引入 caching_sha2_password 认证插件和严格密码策略,进一步加剧了与旧客户端及系统仓库的兼容性挑战。因此,生产环境

weixin_33739523的博客 401

倒序索引

倒排索引: 1.倒排索引也称为反向索引,是一种索引的状态 2.被用来存储,在全文中搜索某个单词在一个文件或一组文档中的映射 3.先查找单词或字符串或更具体的字符串,获取位置,然后通知单词出现的次数和字符串出现的次数 4.下面有3个文件:index.html page.html content.html 三个文件中有一些数据,通过倒排索引的方式统计单词在每个文件中出现的次数 例如: had...

大数据 7644

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1512

一文读懂倒排序索引涉及的核心概念

相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是倒排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下倒排序索引,这个概念搞明白之后,然后学习Elasticsearch就会清晰很多了。

liwenxiang629的博客 1645

在 NVIDIA Orin (JetPack 6.0) 上配置 PyTorch 2.4 + Torchvision 0.19 的完整避坑指南

本文提供在NVIDIA Jetson Orin设备上,基于JetPack 6.0系统配置PyTorch 2.4与Torchvision 0.19环境的完整指南。通过使用Miniconda环境隔离、安装特定版本PyTorch夜间构建版、编译匹配的Torchvision源码等步骤,解决版本不匹配、CUDA支持等常见问题,确保AI开发环境稳定可用。

weixin_29179311的博客 363

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

mysql 索引倒序_(译)MySQL 8.0实验室---MySQL中的倒序索引(Descending Indexes)

译者注:MySQL 8.0之前,不管是否指定索引建的排序方式,都会忽略创建索引时候指定的排序方式(语法上不会报错),最终都会创建为ASC方式的索引,在执行查询的时候,只存在forwarded(正向)方式对索引进行扫描。关于正向索引和反向索引,逻辑上很容易理解,这里有两个相关的概念:正向索引或者反向(倒序)索引,两者都是在构建B树索引时候的相关字段排序方式,是B索引树的逻辑存储方式正向扫描(forw...

weixin_42231085的博客 3170

YOLOv26与其他目标检测算法的对比分析

本文对YOLOv26与其他主流目标检测算法进行了全面对比分析。YOLOv26在COCO数据集上达到96.0% mAP@0.5和79.0% mAP@0.5:0.95,显著优于其他YOLO系列算法,同时保持85FPS的推理速度和35MB的轻量级模型。相比两阶段算法(如Faster R-CNN),YOLOv26在速度、模型大小和内存占用方面优势明显;相比Anchor-free算法(如CenterNet),YOLOv26在速度和模型压缩方面更优。其核心创新包括动态锚框分配、自注意力机制和轻量级设计,使其成为适用于复

一键难忘的博客 993

倒排索引原理

下图是一个相对复杂些的倒排索引,与上图的基本索引系统比,在单词对应的倒排列表中不仅记录了文档编号,还记载了单词频率信息(TF),即这个单词在某个文档中的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。这样每个文档就转换为由单词序列构成的数据流,为了系统后续处理方便,需要对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,在如此处理结束后,我们可以得到最简单的倒排索引。

meser88的博客 1万+

【车载以太网测试从入门到精通】系列文章目录汇总

物理层测试、数据链路层测试、以太网交换机测试、网络层测试、传输层测试、以太网TCP/IP协议自动化测试、以太网网络管理测试、以太网网络管理自动化测试、鲁棒性测试、SOME/IP测试、SOMEI/IP服务接口自动化测试、DoIP诊断测试、DoIP诊断自动化测试、DoIP BootLoader刷写、以太网网关路由测试、以太网网关路由自动化测试、AVB测试。

测试领域技术分享 3157

基于MATLAB开发AUTOSAR软件应用层模块-part2.建立一个AUTOSAR的模型,并生成autosar格式代码

上一篇我们建立了一个空模型,这篇我们接着上篇文章,建立一个简单的模型 点击 Library Browser,打开simulink模块库,见下图 左侧是模块库的列表,右侧是每个模块库里包含的具体的模块。 点击通用模块库,里边是一些常见的模块, 我们选取里边的3个模块,分别是输入,输出和增益三个模块,右键点击模块,选择add block to model xx,可以把模块添加到模型中。 然后练好连线 一个简单的模型就搭建好了,之后我们修改配置,将模型修改为AUT...

汽车软件开发 3301

mysql 索引倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

原创作者:杨涛涛我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。比如对于以下的查询,无法发挥索引的最佳性能。查询一:select * from tb1 where f1 = ... order by id desc;查询二:select * from tb1 where f1 = ... order ...

weixin_28949049的博客 610

YOLOv11 改进 - 注意力机制 | 空间增强注意力SEAM(Spatially Enhanced Attention Module)提升遮挡场景检测鲁棒性

本文介绍了分离与增强注意力模块(SEAM)在YOLOv11中的结合应用。SEAM模块旨在增强面部特征学习能力,特别是处理面部遮挡问题。它采用多头注意力机制强调面部区域、抑制背景区域,第一部分使用深度可分离卷积减少参数并学习通道重要性,通过1x1卷积增强通道联系,利用两层全连接网络融合通道信息,经指数归一化后作为注意力权重与原始特征相乘。我们将SEAM集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,该方法有助于提升模型检测性能。

魔改工程师的博客 1664

倒序排序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

原创作者:杨涛涛我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。比如对于以下的查询,无法发挥索引的最佳性能。查询一:select * from tb1 where f1 = ... order by id desc; 查询二:select * from tb1 where f1 = ... order...

weixin_28693309的博客 324

SpringBoot4.0+JDK25+GraalVM实战:云原生新纪元,微服务性能翻倍的落地指南

三者的组合不是偶然,而是“框架优化+JDK升级+虚拟机革新”的必然结果——SpringBoot4.0完善了对GraalVM原生镜像的支持,JDK25强化了云原生与AOT编译能力,GraalVM则提供了极致的启动速度和资源利用率,三者协同,刚好命中云原生微服务的核心痛点。SpringBoot4.0+JDK25+GraalVM的组合,不是简单的版本升级,而是云原生微服务的一次性能革命。

2601_94871597的博客 1141

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

原创作者:杨涛涛我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。比如对于以下的查询,无法发挥索引的最佳性能。查询一:select * from tb1 where f1 = ... order by id desc; 查询二:select * from tb1 where f1 = ... order...

weixin_39682560的博客 303

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

mysql8倒排索引_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

原创作者:杨涛涛我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。比如对于以下的查询,无法发挥索引的最佳性能。查询一:select * from tb1 where f1 = ... order by id desc;查询二:select * from tb1 where f1 = ... order...

weixin_42172572的博客 754

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

跨浏览器控件sdk2.3.0_跨时代的MySQL8.0新特性解读

MySQL发展历程MySQL8.0新特性MySQL5.7升级8.0展望未来简介MySQL 经过20来年发展现在已是世界上最流行的开源数据库,8.0 版本作为5.7版本后的跨越大版本,除了大表秒级加列外还有其它什么特性呢?能在生产上使用吗?MySQL5.7 怎么才能无损升级到MySQL8.0?MySQL发展历程起源于上个世纪末的MySQL每隔2~3年就会发布一次大版本,不断持续的“升级”。...

weixin_39709194的博客 762

MySQL 8.0 索引设计实战:3 个复合索引案例解析与 5 大避坑指南

本文深入解析MySQL 8.0复合索引的设计原理与实战应用,通过3个典型业务场景案例展示索引优化策略,并提供5大常见避坑指南。内容涵盖慢SQL优化、索引选择性计算、EXPLAIN执行计划解读等核心知识点,帮助开发者掌握高效索引设计技巧,显著提升数据库查询性能。

511

MySQL索引核心原理与面试高频问题解析

数据库索引作为提升查询性能的核心技术,其底层通常采用B+树数据结构实现空间换时间的优化策略。从原理上看,B+树通过多路平衡查找将时间复杂度控制在O(log n),配合InnoDB引擎的页存储机制,能高效支持千万级数据检索。在工程实践中,联合索引的最左前缀原则、覆盖索引优化、索引下推(ICP)等技术可显著提升查询效率,而隐式类型转换、函数操作等常见陷阱则会导致索引失效。特别是在MySQL 8.2版本中,新增的动态填充因子、索引跳跃扫描、函数索引等特性,为高并发场景下的索引优化提供了更多解决方案。对于开发者而言

weixin_34302798的博客 521

MySQL数据库与索引技术深度解析

MySQL作为最流行的开源关系型数据库管理系统(RDBMS),自1995年诞生以来,凭借其卓越的性能、可靠的稳定性和完善的生态系统,长期占据DB-Engine数据库排行榜前三甲位置。采用经典的客户端-服务器架构,支持标准SQL语言规范,能够有效管理结构化数据。合理使用索引可使查询性能提升百倍,但需要持续监控和优化。建议结合实际业务负载,定期进行:慢查询日志分析执行计划审查索引有效性评估存储引擎参数调优。

weixin_73344672的博客 984
上一篇: 分布式 | DBLE 如何实现 Prepared Statement 协议
下一篇: 新特性解读 | MySQL 8.0.16 组复制新功能:消息碎片化
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值