MySQL8.0中你必须要知道的索引新特性

 更新时间:2022年11月08日 15:16:26   作者:JAVA旭阳  
MySQL8.0索引新特性,支持降序索引,降序索引以降序存储键值,下面这篇文章主要给大家介绍了关于MySQL8.0中你必须要知道的索引新特性的相关资料,需要的朋友可以参考下

前言

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降序索引无效

  • 在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
  • 我们用show create table student;查看表的信息。

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

降序索引好处

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

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

那么降序索引的底层数据结构是什么样的呢?下图是基于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中关于索引的两个新特性,一个是支持降序索引,另外一个是支持隐藏索引,他们都是有着非常强的实用价值的。

到此这篇关于MySQL8.0中你必须要知道的索引新特性的文章就介绍到这了,更多相关MySQL8.0索引新特性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql如何统计同一字段不同值的个数

    mysql如何统计同一字段不同值的个数

    这篇文章主要介绍了mysql如何统计同一字段不同值的个数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 阿里云 Centos7.3安装mysql5.7.18 rpm安装教程

    阿里云 Centos7.3安装mysql5.7.18 rpm安装教程

    这篇文章主要介绍了阿里云 Centos7.3安装mysql5.7.18 rpm安装教程,需要的朋友可以参考下
    2017-06-06
  • 一文读懂MySQL 表分区

    一文读懂MySQL 表分区

    MySQL自带了分区功能,我们可以创建一个带有分区的表,而且不需要借助任何外部工具,本文主要了介绍了MySQL表分区,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
    2022-03-03
  • Mysql 增加主键或者修改主键的sql语句操作

    Mysql 增加主键或者修改主键的sql语句操作

    这篇文章主要介绍了Mysql 增加主键或者修改主键的sql语句操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 一个字段同时满足多个条件的查询

    一个字段同时满足多个条件的查询

    当一个字段需要同时等于多个值的时候,用and直接连不会有数据查出。
    2011-08-08
  • MySql 知识点之事务、索引、锁原理与用法解析

    MySql 知识点之事务、索引、锁原理与用法解析

    这篇文章主要介绍了MySql 知识点之事务、索引、锁原理与用法,结合实例形式较为详细的分析了mysql数据库事务、索引、锁的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-09-09
  • MYSQL初学者命令行使用指南

    MYSQL初学者命令行使用指南

    其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。
    2008-06-06
  • mysql中的锁机制深入讲解

    mysql中的锁机制深入讲解

    对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外。下面这篇文章主要给大家介绍了关于mysql中锁机制的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-11-11
  • 一文解决连接MySQL报错is not allowed to connect to this MySQL server

    一文解决连接MySQL报错is not allowed to connect to this MySQL 

    这篇文章主要给大家介绍了关于如何通过一文解决连接MySQL报错is not allowed to connect to this MySQL server的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 使用ORM新增数据在Mysql中的操作步骤

    使用ORM新增数据在Mysql中的操作步骤

    这篇文章主要介绍了使用ORM新增数据在Mysql中,但是在这需要注意需要大家新建ORM模型,具体搭建步骤及详细过程跟随小编一起看看吧
    2021-07-07

最新评论