手记

【学习打卡】第21天--玩转MySQL8.0新特性第三章优化器索引

课程名称 :玩转MySQL8.0新特性


课程章节:优化器索引


讲师:董旭阳



课程内容:

优化器索引
隐藏索引
降序索引
函数索引
隐藏索引
MySQL8.0 开始支持隐藏索引(invisible index),不可见索引。
隐藏索引不会被优化器使用,但仍然需要进行维护。
应用场景:软删除、灰度发布。

如果某个设置为隐藏的索引实际上仍然需要或者被优化器所使用,可以通过以下多种方法发现缺少该索引带来的影响:
索引提示中使用了该索引的查询将会产生错误。
性能模式(Performance Schema)中的数据显示受影响查询的负载升高。
EXPLAIN 语句显示了不同的查询执行计划。
慢查询日志中出现了新的查询语句。

降序索引只有innodb引擎支持

从 explain 解释可以看出,查询五条数据,需要扫描96491 行数据,并且使用了filesort。
降序索引只是对查询中特定的排序顺序有效,即升序索引降序排序反无效,降序索引升序排序无效。如果使用不当,反而查询效率更低,

函数索引顾名思义就是加给字段加了函数的索引,这里的函数也可以是表达式。所以也叫表达式索引。

MySQL 8.0 推出来了函数索引让这些变得相对容易许多。
不过函数索引也有自己的缺陷,就是写法很固定,必须要严格按照定义的函数来写,不然优化器不知所措。



测试表

create table t3(c1 varchar(10), c2 varchar(10));

create index idx on t3(c1);创建普通索引

create index fun_idx on t3( (UPPER(c2)) );创建函数索引语法,如c2转换为大写的结果作为索引

show index from t3\G

explain select * from t3 where upper(c2) = 'ABC'; 如果没设置函数索引就是where全表查;反之可以走索引,如用户名查询

json建索引 直接建 json会超长,所以 index((CAST(data->>'$.name' as char(30))))


课程收获:学习了mysql8.0 索引优化的相关知识,在数据量特别大是情况下,好好利用好这些索引,会大大提高我们的查询速度。






0人推荐
随时随地看视频
慕课网APP