MySQL 8.0 新特性:invisible indexes

文若3年前技术文章979

一、前言

什么是 invisible indexes 呢?就是不可见索引,优化器会默认忽略的索引,关于这个特性的用处,需要我们一起挖掘。

二、案例思考

某客户研发提了一条删除索引的 SQL,这张表 15G,经确认后说索引已不再使用,随后执行删除索引 SQL,结果不一会数据库 CPU 就开始飙升,活跃会话出现堆积,发现依然有 SQL 需要依赖刚才使用的索引。

现在删除了,只能走全表扫描了。马上又加回去,又有很多会话堆积,还有 MDL 锁,表还非常大,只能临时先停掉相关业务,重新加上索引后恢复。

如果有 8.0 这个特性,那我们删除一个索引,就安全多了,只需要修改属性即可。

-- 修改索引属性,不可见

alter table dwd_total_value_vendor_day alter index index_mult_dim_day invisible;

三、总结

我们再次对比一下 5.7 和 8.0 的索引属性,下方是 5.7

*************************** 3. row ***************************
        Table: new
   Non_unique: 1
     Key_name: idx_new_title
 Seq_in_index: 1
  Column_name: new_title
    Collation: A
  Cardinality: 2476
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:

下方是 8.0 版本:

*************************** 3. row ***************************
        Table: new
   Non_unique: 1
     Key_name: idx_new_title
 Seq_in_index: 1
  Column_name: new_title
    Collation: D
  Cardinality: 2291
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL

目前来看 8.0 为索引添加了一些小特性,使 MySQL 8.0 的索引功能更加完整和精致 🎁

关于 invisible indexes 更像是索引的开关,某些情况下还是很有用的。


下面是关于不可见索引常用 SQL 语句模版

-- 查询元数据,哪些索引不可见
select table_schema, table_name, index_name, column_name, is_visible
from information_schema.statistics
where is_visible = 'no';
-- 修改索引可见
alter table xx alter index idx_xx visible;
-- 修改索引不可见
alter table xx alter index idx_xx invisible;
-- 创建一个不可见索引
alter table xx add index idx_xx(column_name) invisible;

相关文章

爬坑记录------容器内外网络不通,端口无法访问

爬坑记录------容器内外网络不通,端口无法访问

背景:客户需要一套datahub用于分许sparksql血缘,因此需要基于docker搭建,在搭建过程中遇到一个较坑的问题,这里做以记录搭建完成后查看docker容器已经正常启动查看红框中的内容信息,...

数据湖技术之iceberg(八)Spark与Iceberg整合DDL操作

数据湖技术之iceberg(八)Spark与Iceberg整合DDL操作

1.CREATE TABLE 创建表Create table 创建Iceberg表,创建表不仅可以创建普通表还可以创建分区表,再向分区表中插入一批数据时,必须对数据中分区列进行排序,否则会出现文件关闭...

bucket跨域问题处理

bucket跨域问题处理

问题描述OSS bucket 访问存在跨域问题问题处理查看oss 能否针对整个bucket设置no-cache吗核实目前阿里云后台只支持单个文件的HTTP头设置,不支持批量设置,如果有多个文件或者后续...

log_queries_not_using_indexes参数设置

log_queries_not_using_indexes参数设置

【现象】通过查看慢日志发现有如下信息: 如上慢日志里出现较多 'index not used' warning(s) suppressed 信息;该信息主要是因为开启 log_queries_not_...

MySQL 8.0 新特性深度解析,成为数据库高手的必备!

MySQL 8.0 新特性深度解析,成为数据库高手的必备!

前言MySQL 5.7 在 2023 年 10 月 31 日起,就已经终止软件生命周期了,意味着 MySQL 官方将不再提供对 MySQL 5.7 版本的技术支持和更新。8.0 版本成为官方长期支持版...

kafka文件存储机制

kafka文件存储机制

Topic 数据的存储机制       Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数据。P...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。