MySQL 8.0 新特性:invisible indexes

文若1年前技术文章347

一、前言

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

相关文章

clickhouse集群部署(一)

clickhouse集群部署(一)

1、rpm包下载安装部署完整包地址:https://packages.clickhouse.com/rpm/stable/📎clickhouse-common-static-dbg-22.8.4.7....

静默安装oracle软件参数文件解析

文件位置在oracle软件解压目录下的database/response/db_install.rsp,主要参数解析如下########################################...

Jenkinsfile说明

Jenkinsfile说明

当我们在使用jenkins进行CI/CD的时候,简单的内容我们可以通过jenkins页面来实现配置。但是如果有复杂的需求还是需要通过jenkinsfile来实现jenkinsfile简单介绍Jenki...

MySQL优化器特性(一)IN和Exists(semijoin)子查询优化策略

这篇文章中的SQL和执行计划在mysql 8.0.31环境下进行测试。测试的表结构和数据:表结构mysql> show create table tp\G...

PG参数整理

一、参数的分类参数的类型名称说明internal内部参数,只读无法修改。postgres程序写死或者是在初始化指定后无法修改的参数postmaster更改该类参数,需重启生效sighup不需重启,重新...

Kerberos安装

Kerberos安装

1、环境准备(1)安装好jdk(2)下载Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。解压下载后的z...

发表评论    

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