课程名称 :玩转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 索引优化的相关知识,在数据量特别大是情况下,好好利用好这些索引,会大大提高我们的查询速度。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦