没有合适的资源?快使用搜索试试~ 我知道了~
目录 一、优化器索引 二、InnoDB 增强 三、JSON 增强 四、账户与安全 五、通用表表达式 六、窗口函数 七、开发者功能 一、优化器索引 【1】 隐藏索引(invisible index):在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用,但仍需要维护。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。 【应用场景】:软删除:删除索引,在线上,如果删除错了索引,只能
资源详情
资源评论
资源推荐
MySQL8.0 的新特性的新特性
目录目录
一、优化器索引
二、InnoDB 增强
三、JSON 增强
四、账户与安全
五、通用表表达式
六、窗口函数
七、开发者功能
一、优化器索引一、优化器索引
【1】 隐藏索引隐藏索引(invisible index)::在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用,但仍
需要维护。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个
索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。
【应用场景应用场景】:软删除::软删除:删除索引,在线上,如果删除错了索引,只能通过创建索引的方式将其添加回来,对于大的数据库而言,是比较耗性能
的;为了避免删错,可以先将其设置为不可见,优化器这时候就不会使用它,但是后台仍然在维护,确定后,再删除。
【创建隐藏索引创建隐藏索引】:命令如下(如果是不隐藏,则不需要后面的 invisible关键字)::
create index 索引名称 on 表名(字段名) invisible;
使用 explain语句查看查询优化器对索引的使用情况:
explain select * from 表名 where 条件;
查询优化器有很多开关,有一个是 use_invisible_indexes(是否使用隐藏索引),默认是off(不适用),将其设置成on,即可使用隐藏索引。查看当
前查询优化器的所有开关,执行如下命令:
select @@optimizer_switch;
设置已经存在的索引为可见或者隐藏,执行如下命令:主键不可以设置为隐藏索引主键不可以设置为隐藏索引。
alter table 表名 alter index 索引名 visible;
alter table 表名 alter index 索引名 invisible;
【2】降序索引降序索引(descending index)::MySQL 8.0按降序提供对索引的支持,只有 InnoDB引擎支持降序索引,且必须是 BTREE降序索引。这
种索引中的值按降序排列,我们将其向前扫描。在8.0之前,当用户创建降序索引时,我们创建了一个升序索引并向后扫描。一个好处是前向索
引扫描比后向索引扫描更快。真正的降序索引的另一个好处是,它使我们能够使用索引而不是文件夹作为ORDER BY具有混合ASC/DESC排序
关键部分的子句。降序索引是一个频繁请求的SQL功能。MySQL8.0不在对 group by操作进行隐式排序。
【3】函数索引函数索引(functional index)::索引中使用函数表达式,支持 JSON数据节点的索引。函数索引是基于虚拟列的功能实现的假设用户表
(tb_user)的的用户登录账号(username)不需要区分大小写,则可以创建一个函数索引:这样在查询的时候就会使用索引。
create index username_upper_index on tb_user((upper(username)));
--函数查询条件
SELECT * FROM tb_user WHERE upper(username) = 'ABD123DSJ';
二、二、InnoDB 增强增强
【1】原子原子 DDL操作:操作:MySQL5.7 执行 drop命令 drop table t1,t2; 如果t1存在,t2不存在,会提示t2表不存在,但是t1表仍然会被删除。
MySQL8.0 执行同样的drop命令,会提示t2表不存在,而且t1表不会被删除,保证了原子性。ddl操作(针对表)的原子性前提是该表使用的存储
引擎是InnoDB;
【2】自增列持久化:自增列持久化:解决了之前的版本,主键重复的问题。MySQL5.7 及其以前的版本,MySQL服务器重启,会重新扫描表的主键最大值,如
果之前已经删除过 id=100的数据,但是表中当前记录的最大值如果是99,那么经过扫描,下一条记录的id是100,而不是101。MySQL8.0则是
每次在变化的时候,都会将自增计数器的最大值写入redo log,同时在每次检查点将其写入引擎私有的系统表。则不会出现自增主键重复的问题。
【3】集成数据字段;
【4】死锁检查控制;
【5】锁定语句选项;
三、三、JSON 增强增强
【1】内联路径操作符:内联路径操作符:用"->>"表示去掉抽取结果的"号,下面三种效果是一样的:column->>path 等价于之前的。
JSON_UNQUOTE( JSON_EXTRACT(column, path) )
JSON_UNQUOTE(column -> path)
column->>path
【2】】 JSON 聚合函数:聚合函数:MySQL8.0 和MySQL5.7.22 增加了2个聚合函数:
■ JSON_ARRAYAGG()::将多行数据组合成 json数组;示例:
weixin_38656463
- 粉丝: 2
- 资源: 905
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0