前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 8.0 新特性 :隐藏索引 Invisible Indexes

MySQL 8.0 新特性 :隐藏索引 Invisible Indexes

作者头像
dys
发布2018-04-04 10:49:29
2.5K0
发布2018-04-04 10:49:29
举报
文章被收录于专栏:性能与架构

隐藏索引有什么作用

MySQL 8.0 支持了 Invisible Indexes 隐藏索引 这个特性,可以把某个索引设置为对优化器不可见,生成查询计划时便不使用这个索引了,但这个索引还是被正常维护的,例如表数据变更后还是会更新索引。

隐藏索引 最明显的一个作用类似 索引回收站

例如数据库长时间运行后,会积累很多索引,做数据库优化时,想清理掉没什么用的多余的索引,但可能删除某个索引后,数据库性能下降了,发现这个索引时有用的,就要重新建立。

对于较大的表来说,删除、重建索引的成本是很高的,如果在清理索引时能先放入回收站,确认没影响后再彻底删除,有影响的话就恢复回来,这样就方便多了,把索引设置为 隐藏/显示 就可以实现这个需求。

在 MySQL 8.0.0 中,只有 InnoDB 支持隐藏索引,在 8.0.1 中 所有存储引擎都可以使用。

如何使用隐藏索引

建表时指定

代码语言:javascript
复制
CREATE TABLE t1 (
  i INT,
  j INT,
  k INT,
  INDEX i_idx (i) INVISIBLE
) ENGINE = InnoDB;

创建索引时指定

代码语言:javascript
复制
CREATE INDEX j_idx ON t1 (j) INVISIBLE;

修改表结构

代码语言:javascript
复制
ALTER TABLE t1 ADD INDEX k_idx (k) INVISIBLE;

把隐藏索引设为显示

代码语言:javascript
复制
ALTER TABLE t1 ALTER INDEX i_idx VISIBLE;

查看索引的显示状态

代码语言:javascript
复制
SELECT INDEX_NAME, IS_VISIBLE
FROM information_schema.statistics
WHERE TABLE_SCHEMA = 'db1' AND TABLE_NAME = 't1';

查看所有的隐藏索引

代码语言:javascript
复制
SELECT * FROM information_schema.statistics WHERE is_visible='NO';

注意:不能对主键设置隐藏索引

如果一个表中没有指定明确的主键,但对一个 NOT NULL 的列设为了 UNIQUE 索引,那么也不能对这个列设置隐藏索引,因为此时这个列是此表的隐性主键。

小结

参考资料:

代码语言:javascript
复制
https://dev.mysql.com/doc/refman/8.0/en/invisible-indexes.html
http://mysqlserverteam.com/mysql-8-0-invisible-indexes/
https://dzone.com/articles/thoughts-on-mysql-80-invisible-indexes
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 隐藏索引有什么作用
  • 如何使用隐藏索引
    • 建表时指定
      • 创建索引时指定
        • 修改表结构
          • 把隐藏索引设为显示
            • 查看索引的显示状态
              • 查看所有的隐藏索引
              • 小结
              相关产品与服务
              云数据库 MySQL
              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档