大家好,我是冰河~~
今天我们一起来聊聊MySQL8.x版本中新增的三大索引。MySQL8.x中新增了三种索引方式,这三种索引方式直接让MySQL原地起飞了,如下所示。
隐藏索引降序索引函数索引一、隐藏索引1.隐藏索引概述MySQL8.0开始支持隐藏索引(invisibleindex),不可见索引。隐藏索引不会被优化器使用,但仍然需要进行维护。应用场景:软删除、灰度发布。在之前MySQL的版本中,只能通过显式的方式删除索引,如果删除后发现索引删错了,又只能通过创建索引的方式将删除的索引添加回来,如果数据库中的数据量非常大,或者表比较大,这种操作的成本非常高。
在MySQL8.0中,只需要将这个索引先设置为隐藏索引,使查询优化器不再使用这个索引,但是,此时这个索引还是需要MySQL后台进行维护,当确认将这个索引设置为隐藏索引系统不会受到影响时,再将索引彻底删除。这就是软删除功能。
灰度发布,就是说创建索引时,首先将索引设置为隐藏索引,通过修改查询优化器的开关,使隐藏索引对查询优化器可见,通过explain对索引进行测试,确认这个索引有效,某些查询可以使用到这个索引,就可以将其设置为可见索引,完成灰度发布的效果。
2.隐藏索引操作(1)登录MySQL,创建testdb数据库,并在数据库中创建一张测试表t1
mysqlcreatedatabaseifnotexiststestdb;QueryOK,1rowaffected(0.58sec)mysqlusetestdb;Databasechangedmysqlcreatetableifnotexistst1(iint,jint);QueryOK,0rowsaffected(0.05sec)
(2)在字段i上创建索引,如下所示。
mysqlcreateindexi_idxont1(i);QueryOK,0rowsaffected(0.34sec)Records:0Duplicates:0Warnings:0
(3)在字段j上创建隐藏索引,创建隐藏索引时,只需要在创建索引的语句后面加上invisible关键字,如下所示
mysqlcreateindexj_idxont1(j)invisible;QueryOK,0rowsaffected(0.01sec)Records:0Duplicates:0Warnings:0
(4)查看t1表中的索引情况,如下所示
mysqlshowindexfromt1\G***************************1.row***************************Table:t1Non_unique:1Key_name:i_idxSeq_in_index:1Column_name:iCollation:ACardinality:0Sub_part:NULLPacked:NULLNull:YESIndex_type:BTREEComment:Index_