MySQL 8.0 新特性:invisible indexes

文若3年前技术文章1280

一、前言

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

相关文章

CDP实操--配置RangerKMS 并基于Navigator Trustee Server存储KMS密钥

CDP实操--配置RangerKMS 并基于Navigator Trustee Server存储KMS密钥

1.1添加用于部署KMS的服务器到集群从集群host页面里添加两台服务器用于部署rangerkms选择kms-1和kms-2两台服务器等待parcel分发到新加服务器上并自动完成激活 等待host i...

系统RDSCPU打满问题分析报告

系统RDSCPU打满问题分析报告

1. 问题概述在2023年9月01日09点13分,玳数运维组侧接收到业务侧反馈系统响应缓慢,与此同时运维群内新系统RDS 发出CPU打满的告警,告警通知如下: 2. 问题分析a. 数据库会话管理核查玳...

MySQL运维实战(2.1) 登录失败次数太多导致主机被block的问题处理

参数max_connect_errorsMySQL有参数max_connect_errors,当一个主机尝试登录MySQL,失败的次数超过了max_connect_errors,则这个主机将无法登录到...

PG的统计信息(一)

一、统计信息1.1 PG统计信息概述pg的统计信息主要分为两种:第一类统计信息是是负载指标“统计信息”(Monitoring stats),通过stat collector进程进行实时采集更新的负载指...

ES运维(四)扩容方式迁移

ES运维(四)扩容方式迁移

1 迁移概述本次模拟es在线迁移方式:集群扩容-->数据迁移-->老节点下线-->服务重启刷新配置。 中间master替换的时候会有短暂的不可用。 另外业务测需注意:老节点下线前...

借助arthas工具打火焰图

借助arthas工具打火焰图

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

发表评论    

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