1、在MySQL 8.0中,只需要将这个索引先设置为隐藏索引,使查询优化器不再使用这个索引,但是,此时这个索引还是需要MySQL后台进行维护,当确认将这个索引设置为隐藏索引系统不会受到影响时,再将索引彻底删除。这就是软删除功能。
灰度发布,就是说创建索引时,首先将索引设置为隐藏索引,通过修改查询优化器的开关,使隐藏索引对查询优化器可见,通过explain对索引进行测试,确认这个索引有效,某些查询可以使用到这个索引,就可以将其设置为可见索引,完成灰度发布的效、
create index j_idx on t1(j) invisible;
select @@optimizer_switch
alter table t1 alter index j_idx visible;
alter table t1 alter index j_idx invisible;
可以看到use_invisible_indexes=off 表示优化器是否使用不可见索引,默认为off不使用。
set session optimizer_switch="use_invisible_indexes=on";
2、降序索引概述
MySQL 8.0开始真正支持降序索引(descending index)。
只有InnoDB存储引擎支持降序索引,只支持BTREE降序索引。
MySQL 8.0不再对GROUP BY操作进行隐式排序
3、创建函数索引
在c2字段上创建一个将字段值转化为大写的函数索引,如下所示。
mysql> create index func_index on t3 ((UPPER(c2)));
函数索引基于虚拟列实现,在t3表中添加一列c3,模拟c2上的函数索引,如下所示。
mysql> alter table t3 add column c3 varchar(10) generated always as (upper(c1));