MySQL 8.x中新增了三种索引方式,如下所示。
- 隐藏索引
- 降序索引
- 函数索引
一、隐藏索引
1.隐藏索引概述
- MySQL 8.0开始支持隐藏索引(invisible index),不可见索引。
- 隐藏索引不会被优化器使用,但仍然需要进行维护。
- 应用场景:软删除、灰度发布。
在之前MySQL的版本中,只能通过显式的方式删除索引,如果删除后发现索引删错了,又只能通过创建索引的方式将删除的索引添加回来,如果数据库中的数据量非常大,或者表比较大,这种操作的成本非常高。在MySQL 8.0中,只需要将这个索引先设置为隐藏索引,使查询优化器不再使用这个索引,但是,此时这个索引还是需要MySQL后台进行维护,当确认将这个索引设置为隐藏索引系统不会受到影响时,再将索引彻底删除。这就是软删除功能。
灰度发布,就是说创建索引时,首先将索引设置为隐藏索引,通过修改查询优化器的开关,使隐藏索引对查询优化器可见,通过explain对索引进行测试,确认这个索引有效,某些查询可以使用到这个索引,就可以将其设置为可见索引,完成灰度发布的效果。
2.隐藏索引操作
(1)登录MySQL,创建testdb数据库,并在数据库中创建一张测试表t1
mysql> create database if not exists testdb;
Query OK, 1 row affected (0.58 sec)
mysql> use testdb;
Database changed
mysql> create table if not exists t1(i int, j int);
Query OK, 0 rows affected (0.05 sec)
(2)在字段i上创建索引,如下所示。
mysql&