MySQL8.0索引新特性—支持降序索引与支持隐藏索引

MySQL 8.0新增的三种索引方式 在MySQL 8.0中,只需要将这个索引先设置为隐藏索引,使查询优化器不再使用这个索引,但是,此时这个索引还是需要MySQL后台进行维护,当确认将这个索引设置为隐藏索引系统不会受到影响时,再将索引彻底删除。灰度发布,就是说创建索引时,首先将索引设置为隐藏索引,通过修改查询优化器的开关,使隐藏索引对查询优化器可见,通过explain对索引进行测试,确认这个索引有效,某些查询可以使用到这个索引,就可以将其设置为可见索引,完成灰度发布的效果。隐藏索引又叫不可见索引,主要应用于索引的 软删除 和 灰度发布。 阅读详情

前言

MySQL中的索引可以为提高我们的查询效率,相比较于低版本, MySQL 8.0中针对索引做了不少的优化,本文主要分享下MySQL8.0中关于索引的两个新特性,这两个新特性都非常好用,希望大家可以在日常的开发中根据实际场景用起来。

支持索引降序排序

降序索引说明

在建立的索引可以指定索引的顺序,命令如下:

ALTER TABLE table_name ADD [UNIQUE] [INDEX | KEY] [index_name] (col_name[length],...) [ASC | DESC] 复制代码
  • ASC表示升序、DESC表示索引降序排序

  • 从MySQL4版本中就开始支持DESC的语法,但是实际上会忽略它,指导MySQL8.x innoDB存储引擎才支持降序排序。

例子:在MySQL5.x中创建DESC降序索引无效

  1. 在MySQL5.7.16中创建降序索引

create table student ( id_ int(10) AUTO_INCREMENT, student_no varchar(50), student_name varchar(200), update_time datetime, primary key (id_), unique index idx_no(student_no desc) ) 复制代码
  • 创建了降序索引idx_no

  1. 我们用show create table student;查看表的信息。

  1. 同样,我们在MySQL8中查看表的信息,如下图:

​

降序索引好处

你可能疑惑了,那我为什么要设置索引为降序,有什么好处呢?

其实这和我们实际的业务场景息息相关,比如我们的场景中如果存在一个查询,需要对多个列进行排序,且顺序要求不一致,那么使用降序索引将会避免数据库使用额外的文件排序操作,从而提高性能。如果只对单个列进行排序,降序索引的意义不是太大,无论是升序还是降序,升序索引完全可以应付。详细内容请参考文章:www.cnblogs.com/ivictor/p/9…。

那么降序索引的底层数据结构是什么样的呢?下图是基于student表建立的降序索引对应的B+树结构:

​

  • 页10和页12是对应的数据页,存放数据,其中update_time字段对应的值是降序排序,这也是DESC的体现。

  • 页20是目录页,存放索引,它也是降序排序的。

索引数据结构详细请参考:一步步带你设计MySQL索引数据结构。

支持索引的隐藏

隐藏索引的说明

MySQL 8.0 支持了 Invisible Indexes 隐藏索引 这个特性,可以把某个索引设置为对优化器不可见,生成查询计划时便不使用这个索引了,但这个索引还是被正常维护的,例如表数据变更后还是会更新索引。

我们可以通过在创建索引的时候设置索引的隐藏属性,如下:

ALTER TABLE tablename ADD INDEX indexname (propname [(length)]) INVISIBLE; 复制代码

也可以对已经存在的索引切换显示或者隐藏,语法如下:

ALTER TABLE tablename ALTER INDEX index_name INVISIBLE; #切换成隐藏索引 ALTER TABLE tablename ALTER INDEX index_name VISIBLE; #切换成非隐藏索引 复制代码

隐藏索引的好处

众所周知,索引的维护是需要极大的成本的,数据量越大,建立索引花费的成本也就越大。但是,往往我们在调优的时候有这样的需求,我们想要看看禁用掉这个索引对查询性能的影响,如果在8.0版本以前,都是要删除这个索引,发现这个索引有用的,又要加回来,极大的增加了操作成本。

所以隐藏索引最明显的一个作用类似索引回收站。

例如数据库长时间运行后,会积累很多索引,做数据库优化时,想清理掉没什么用的多余的索引,但可能删除某个索引后,数据库性能下降了,发现这个索引时有用的,就要重新建立。这时候隐藏索引就派上用场了。

总结

本文分享了MySQL8.0中关于索引的两个新特性,一个是支持降序索引,另外一个是支持隐藏索引,他们都是有着非常强的实用价值的。如果本文对你有帮助,请留下一个赞吧。

14.7 降序索引 14.7 降序索引 从MySQL 4版本开始就已经支持降序索引的语法了,但是直到MySQL 8.x版本才开始真正支持降序索引。本节就对比MySQL 5.7与MySQL 8.x中对降序索引的处理来介绍MySQL 8.x中的降序索引特性。 14.7.1 降序索引概述 MySQL 8.x版本中另一项重要的新特性就是真正开始支持降序索引,但是只有MySQL的InnoDB存储引擎... 阅读详情

相关推荐

MySQL 8.x新特性之——优化器索引

MySQL 8.x中新增了三种索引方式,如下所示。 隐藏索引 降序索引 函数索引 一、隐藏索引 1.隐藏索引概述 MySQL 8.0开始支持隐藏索引(invisible index),不可见索引。 隐藏索引不会被优化器使用,但仍然需要进行维护。 应用场景:软删除、灰度发布。 在之前MySQL的版本中,只能通过显式的方式删除索引,如果删除后发现索引删错了,又只能通过创建索引的方式将删除...

冰河的专栏 2340

MySql中降序索引及作用,简要概述

代码:explain select b from a order by bdesc,c,d extra。代码:explain select b from a order by b,c,d。create index idx1 on a(b desc,c desc,d desc) 降序。create index idx1(自定义索引名) on a(b(字段名),c,d) 升序。降序(desc,大到小,mysql 8.0之后支持,之前语法支持,效果不支持)会先按照顺序先a,在b, c 的方式进行排序。...

Miss__King的博客 3577

阿里云百炼接入本地Claude,接入idea

阿里云百炼平台提供两种接入方式:未购买套餐时使用通用API Key(sk-xxxxx),需注意免费额度独立计算且不会自动切换模型;购买Coding Plan套餐后使用专属API Key(sk-sp-xxxxx),享受固定月费无超支风险。配置需在.claude/settings.json中设置认证信息,包括API Key和Base URL。建议开启"用完即停"功能避免意外扣费,不同模型的免费额度互不影响。购买套餐后还可通过IDEA插件Claude Code进行集成,实现固定费用下的稳定使用

fengtangjiang的博客 1359

mysql 降序索引_MySQL8.0中的降序索引

前言相信大家都知道,索引是有序的;不过,在MySQL之前版本中,只支持升序索引,不支持降序索引,这会带来一些问题;在最新的MySQL 8.0版本中,终于引入了降序索引,接下来我们就来看一看。降序索引单列索引(1)查看测试表结构mysql> show create table sbtest1\G*************************** 1. row ***************...

weixin_36431035的博客 1782

Windows 10下用Python 3搞定Android源码下载:最新repo工具避坑指南

本文详细介绍了在Windows 10系统上,使用Python 3和官方最新repo工具下载Android源码的完整流程。文章提供了从Git安装、环境配置到repo工具初始化、同步加速及常见错误排查的避坑指南,帮助开发者高效搭建稳定的源码下载环境。

weixin_29266749的博客 436

SPSS回归分析(线性:一元(简单)和多重;非线性logistic)

SPSS线性回归分析回归分析一、线性模型(针对连续因变量,线性关系)(一)简单线性回归(一元线性回归)1、绘制散点图2、建立简单(一元)线性回归模型3、建立模型后,检查预测结果(二)多重回归分析1、绘制矩阵分布散点图(论文专用你懂的)2、建立多重回归模型point 1:自变量加入方法:逐步(步进)法3、建立模型后,检查预测结果二、非线性模型(将非线性问题转换为线性问题)1、logistic分析的回归模型1.1 建立回归模型1.2 利用回归模型进行预测 根据之前的学习,通过评价实验得到了主观数据, 通过 描述

weixin_44394352的博客 5万+

MySQL索引的创建、删除以及MySQL8.0索引新特性:支持降序索引、隐藏索引

文章目录1.索引的分类1.1 普通索引1.2 唯一性索引1.3 主键索引1.4 单列索引1.5 多列索引1.6 全文索引1.7 空间索引2.索引的声明与使用2.1 创建索引2.1.1 创建表时创建索引2.1.2 创建表时创建索引2.1.3 参数含义2.2 删除索引3.MySQL8.0索引新特性3.1 支持降序索引3.2 隐藏索引3.2.1 隐藏索引的作用3.2.1 隐藏索引的创建3.2.1.1 创建表时创建隐藏索引3.2.1.1 创建表后创建隐藏索引3.2.2 修改索引的可见性3.2.3 注意 1.索引的分

weixin_46245201的博客 2237

RealSense D455启动教程

RealSense D455启动教程 修改rs_camera.launch

每天进步一点点 2417

MySQL8.0中你不得不知道的索引新特性

MySQL中的索引可以为提高我们的查询效率,相比较于低版本, MySQL 8.0中针对索引做了不少的优化,本文主要分享下MySQL8.0中关于索引的两个新特性,这两个新特性都非常好用,希望大家可以在日常的开发中根据实际场景用起来。本文分享了MySQL8.0中关于索引的两个新特性,一个是支持降序索引,另外一个是支持隐藏索引,他们都是有着非常强的实用价值的。如果本文对你有帮助,请留下一个赞吧。

m0_73311735的博客 445

用SimaPro做碳足迹分析:手把手教你完成产品生命周期评估报告

本文详细介绍了如何使用SimaPro进行碳足迹分析,从软件安装到生命周期评估报告的完整流程。通过实战案例演示,帮助制造业企业、咨询机构和科研团队掌握产品生命周期评估(LCA)的核心技术,精准识别环境热点并优化决策,为可持续发展转型提供科学依据。

yhn45678901的博客 715

C#:实现统计图像主颜色的算法(附完整源码)

C#:实现统计图像主颜色的算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 519

8. MySQL 索引的创建与涉及原则(详解说明)

在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。

weixin_61635597的博客 1259

SAP SD销售订单的ATP检查简介

如果可用性检查组设置为01(汇总需求),系统将更新销售订单需求到汇总表VBBS,该表中未记录销售订单号码,因此在MD04中不会显示销售订单号码,而是按天汇总显示销售需求。如果物料的可用性检查组设置为02(单个需求),系统将更新销售订单需求到表VBBE,该表中记录了销售订单号码,因此在MD04显示销售订单的号码以及需求,前面的文章中我们解释了PP模块中的ATP检查,也解释了MM模块中的ATP的检查,本文将说明一下SD模块中的ATP检查。可用性检查用的最多的就是02,有兴趣的同学可以测试一下可用性检查01。

我小时候很黑的博客 4295

MySQL安装流程 及 8.0与5.7区别

MySQL 8.0和MySQL 5.7区别及 8.0安装。

. 8416

华为OD面试八股真题 - 操作系统 - 1

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 1636

OV9734 DATASHEET,完整规格书

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

MySQL8.0概述及新特性

MySQL8.0概述及新特性

小草的博客 5448

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【MySQL索引与优化篇】索引的分类与设计原则

索引的分类,mysql8索引新特性,索引的设计原则

比尔高特的博客 192

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql按升序创建索引_MySQL8.0.19 三大索引新功能:隐藏索引,降序索引,函数索引...

MySQL8.0版本带来了3大索引新功能:隐藏索引,降序索引,函数索引,看字面意义,大致也都能猜到那些功能,下面测试实际了解一下。隐藏索引:MySQL 8.0 支持隐藏索引(invisible index),也称为不可见索引。隐藏索引不会被优化器使用。主键不能设置为隐藏(包括显式设置或隐式设置)CREATE TABLE `tb_index` (`id` bigint NOT NULL ,`name...

weixin_39756481的博客 223

MySQL 8.0新特性

MySQL 5.7以及早起版本,InnoDB自增列计数器(auto_increment)的值只存储在内存中。将权限授予哪个用户。函数索引在MySQL中相当于新增了一个列,这个列会根据指定的函数进行计算结果,然后使用函数索引时,用这个新增的计算列作为索引。MySQL 允许所有用户看到系统数据库的名称和某些表的内容,以便他们能够查询关于自己数据库对象的元数据。MySQL8.0.13开始支持在索引使用函数(表达式)的值。MySQL8.0开始支持原子DDL操作,其中与表相关的原子DDL只支持InnoDB存储引擎。

学习学习学习学习 1715

mysql8.0.30索引创建与设计原则

mysql8.0.30索引创建原则

HappyLearnerL的博客 512

Mysql高级——索引创建和使用

MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。按照物理实现方式,索引可以分为 2 种:聚簇索引和非聚簇索引。按照作用字段个数进行划分,分成单列索引和联合索引。小结:不同的存储引擎支持的索引类型也不一样 InnoDB :支持 B-tree、Full-text 等索引,不支持 Hash索引;MyISAM : 支持 B-tree、Full-text 等索引,不支持 Hash 索引;

康小庄的博客 4099

groupby索引有效吗_两千字揭密 MySQL 8.0.19 三大索引新功能

原文链接:https://www.modb.pro/db/22619导读:本文详细介绍 MySQL 8.0.19 三大索引新功能,隐藏索引,降序索引,函数索引,结合其他同仁的技术应用案例,进一步进行验证改编,最后总结心得,希望对大家有帮助。MySQL 8.0 版本带来了3大索引新功能:隐藏索引,降序索引,函数索引,看字面意义,大致也都能猜到那些功能,下面测试实际了解一下。隐藏索引MySQL 8.0...

weixin_39856589的博客 106

第8章_索引的创建与设计原则

从MySQL 8.x开始支持 隐藏索引(invisible indexes) ,只需要将待删除的索引设置为隐藏索引,使 查询优化器不再使用这个索引(即使使用force index(强制使用索引),优化器也不会使用该索引), 确认将索引设置为隐藏索引后系统不受任何响应,就可以彻底删除索引。这种通过先将索引设置为隐藏索 引,再删除索引的方式就是软删除。在表中单个字段上创建的索引,单列索引只根据该字段进行索引,单列索引可以是普通索引,也可以是唯一索引,还可以是全文索引,只需要保证该索引只对应一个字段即可。

qq_45027843的博客 1057

MySQL索引之创建

MySQL索引之创建

宋文轩 1798

mysql高级篇 | 尚硅谷 | 第8章_索引的创建与设计原则

(1)冗余索引举例:建表语句如下通过索引就可以对name列进行快速搜索,再创建一个专门针对name列的索引就算是一个冗余索引,维护这个索引只会增加维护的成本,并不会对搜索有什么好处。(2)重复索引另一种情况,我们可能会对某个列重复建立索引col2 INT,col1 既是主键、又给它定义为一个唯一索引,还给它定义了一个普通索引,可是主键本身就会生成聚簇索引,所以定义的唯一索引和普通索引是重复的,这种情况要避免。

m0_74795952的博客 1082
上一篇: 浅谈线程池的拓容、判断、限速技巧
下一篇: 谈一谈什么是 MySQL 中的 join 查询
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值