f分布表完整图a=0.05_MySQL8.0新特性-invisible indexes

本文介绍了MySQL 8.0引入的不可见索引特性,允许在不删除索引的情况下验证其对性能的影响。通过设置索引为invisible,MySQL优化器将忽略该索引,类似于物理删除。文中详细展示了如何创建和修改索引为invisible,并通过执行计划验证其效果。此外,讨论了即使invisible,主键索引和隐性主键也无法设置为invisible的情况。
摘要由CSDN通过智能技术生成
7f18c4cc1325e3c1687740706b461466.png

作者 李春·沃趣科技首席架构师

出品 沃趣科技

作者简介:

曾就职于阿里巴巴,全程参与阿里数据架构从Oracle迁移到MySQL过程,参与分布式中间件Cobar设计。

| 导语

MySQL 8.0版本中新增了invisible indexes(不可见索引)特性,索引被invisible后,MySQL优化器就会忽略该索引(无此特性时需要删除索引才能达到相同效果),由此能够验证在该索引被删除的情况下对性能的影响程度。

| 怎么创建一个invisible indexes或者修改索引为invisible

在新建表,新建索引时,可以显式声明某索引为invisible。

示例-新建表&新建索引时声明invisible indexes

[root@localhost.localdomain:/usr/local/mysql 8.0.11_Instance1 root@localhost:(none) 14:59:15]>use employees;Database changed[root@localhost.localdomain:/usr/local/mysql 8.0.11_Instance1 root@localhost:employees 15:05:22]> CREATE TABLE `employees_1` (-> `emp_no` int(11) NOT NULL,-> `birth_date` date NOT NULL,-> `first_name` varchar(14) COLLATE utf8_bin NOT NULL,-> `last_name` varchar(16) COLLATE utf8_bin NOT NULL,-> `gender` enum('M','F') COLLATE utf8_bin NOT NULL,-> `hire_date` date NOT NULL,-> PRIMARY KEY (`emp_no`),-> KEY `idx_hire_date` (`hire_date`) INVISIBLE-> ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;Query OK, 0 rows affected (1.34 sec)[root@localhost.localdomain:/usr/local/mysql 8.0.11_Instance1 root@localhost:employees 15:05:25]>ALTER TABLE employees_1 ADD INDEX idx_birth_date (birth_date) INVISIBLE;Query OK, 0 rows affected (0.71 sec)Records: 0 Duplicates: 0 Warnings: 0[root@localhost.localdomain:/usr/local/mysql 8.0.11_Instance1 root@localhost:employees 15:06:39]>show create table employees_1G*************************** 1. row *************************** Table: employees_1Create Table: CREATE TABLE `employees_1` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`last_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`gender` enum('M','F') CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`hire_date` date NOT NULL,PRIMARY KEY (`emp_no`),KEY `idx_hire_date` (`hire_date`) /*!80000 INVISIBLE */,KEY `idx_birth_date` (`birth_date`) /*!80000 INVISIBLE */) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.00 sec)

对于已有索引,可以修改它为invisible的。对于在线系统,修改索引为invisible能够验证在该索引被删除的情况下对性能的影响程度。

修改某个索引为invisible

示例-修改索引为invisble/visible

[root@localhost.localdomain:/usr/local/mysql 8.0.11_Instance1 root@localhost:employees 15:08:41]>ALTER TABLE employees_1 ALTER INDEX idx_birth_date VISIBLE;Query OK, 0 rows affected (0.15 sec)Records: 0 Duplicates: 0 Warnings: 0[root@localhost.localdomain:/usr/local/mysql 8.0.11_Instance1 root@localhost:employees 15:10:30]>ALTER TABLE employees_1 ALTER INDEX idx_birthd_hired INVISIBLE;Query OK, 0 rows affected (0.12 sec)Records: 0 Duplicates: 0 Warnings: 0[root@localhost.localdomain:/usr/local/mysql 8.0.11_Instance1 root@localhost:employees 15:10:36]>show create table employees_1G *************************** 1. row *************************** Table: employees_1Create Table: CREATE TABLE `employees_1`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值