MySQL 8.0 新特性:invisible indexes

文若3年前技术文章1287

一、前言

什么是 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;

相关文章

nginx配置反向代理某个url

nginx配置反向代理某个url

本文讲的这个漏洞 主要是为了解决漏洞扫描的问题我先介绍下这个漏洞主要是因为访问https://172.16.120.17:18090/ws/v1/cluster/info这个 yarn rest的一个...

借助cwRsync工具迁移

借助cwRsync工具迁移

服务端安装服务端软件如下,会自动在系统内创建一个系统用户,用户名为:xxx  ,密码为:xxx查看系统用户,会发现自动创建了如下用户:修改配置文件:rsyncd.confuse chroot = fa...

HDFS分层存储(一)

1、介绍Hadoop分布式文件系统支持在HDFS中的各种存储类型。现在,您可以为DataNode数据目录指定不同的存储类型,这样可以根据数据使用频率优化数据使用并降低成本。例如需要频繁使用的数据,可以...

PG初识

PG数据库是一种典型的C/S模型应用,不同的客户端通过TCP/IP进行连接、每个连接启动一个fork进程(多进程数据库)。一、pg逻辑架构1.1 pg与MySQL异同对比逻辑架构postgresMyS...

借助arthas工具打火焰图

借助arthas工具打火焰图

1、下载arthas在命令行下面执行(使用和目标进程一致的用户启动,否则可能 attach 失败):curl -O https://arthas.aliyun.com/arthas-boot.jar...

基于commit命令创建docker镜像

基于commit命令创建docker镜像

创建docker容器```Plain Text sudo docker run -it centos:centos7 /bin/bash![https://teamo-md.oss-cn-shang...

发表评论    

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