当前位置: 首页 > news >正文

MySQL8新特性

目录

1.降序索引

2.group by不再隐式排序

3.隐藏索引

4.函数索引

5.增加select ... for share查询共享锁

6.跳过锁等待

7.自适应参数innodb_dedicated_server

8.死锁检测控制

9.undo日志文件独立,不再使用系统表空间

10.binlog日志过期时间精确到秒

11.窗口函数

12.默认字符集由latin1变为uft8mb4

13.MyISAM系统表全部换成InnoDB表

14.元数据存储变动

15.自增变量持久化

16.DDL原子化

17.参数修改持久化


参考

MySQL :: MySQL 8.0 Reference Manual :: 1.3 What Is New in MySQL 8.0

MySQL :: MySQL 8.0 Reference Manual :: 1.4 Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 8.0

1.降序索引
  • 仅InnoDB存储引擎支持降序索引
  • 添加测试数据
 create table t1(c1 int,c2 int,index idx_c1_c2(c1,c2 desc));insert into t1 (c1,c2) values(1,10),(2,50),(3,50),(4,100),(5,80);

  • 验证

2.group by不再隐式排序
  • MySQL7默认排序

  • MySQL8不再排序

3.隐藏索引
  • 使用invisible设置索引为隐藏索引
  • 隐藏索引只是不可以见,在查询时不能使用该索引
  • 数据新增或者更新时还是会维护该索引
  • 主键不能设置为invisible
ALTER TABLE t1 ALTER INDEX idx_c1_c2 INVISIBLE;

  • show index查看索引

  • explain查看执行计划索引不可用

  • 如果想要临时使用隐藏索引,可以设置
 set session optimizer_switch="use_invisible_indexes=on"

4.函数索引
  • mysql8之前,如果在查询列上加入函数操作,将导致索引失效
  • mysql8开始支持在索引中使用函数
  • 函数索引基于虚拟列功能实现,相当于增加了一个新列,这个列会根据函数计算结果存储,使用函数索引时就会使用该虚拟列作为索引
  • 添加测试数据
 create table t3(c1 varchar(10),c2 varchar(10));create index idx_c1 on t3(c1);create index func_idx on t3((UPPER(c2)));insert into t3 (c1,c2) values ('a1','b1'),('a2','b2'),('a3','b3');

  • show index查看索引

  • explain查看使用索引情况

5.增加select ... for share查询共享锁

mysql8以前仅支持select ... for update查询排它锁

mysql8以后增加select .. for share 查询共享锁

6.跳过锁等待
  • 在select ... for update/share 后面允许跟nowait,skip locked等语法
  • 当查询行已加锁时,nowait会立即返回报错

  • skip locked会立即返回,
    • 当表无主键时返回结果为空

    • 当表有主键时返回未锁定行

7.自适应参数innodb_dedicated_server
  • 默认关闭
  • 开启后InnoDB根据检测到内存大小自动配置innodb_buffer_pool_size,innodb_log_file_size等参数,
  • 会尽可能多的占用系统资源可占用资源提升性能

8.死锁检测控制
  • 增加配置innodb_deadlock_detect,用于控制系统是否执行InnoDB死锁检测
  • 默认开启
  • 死锁检测会消耗数据库性能
  • 对于高并发系统,可以关闭死锁检测,提升系统性能

9.undo日志文件独立,不再使用系统表空间
10.binlog日志过期时间精确到秒
  • 废弃expire_logs_days参数
  • 增加参数binlog_expire_logs_seconds

11.窗口函数
  • 测试数据
#创建一张账户余额表
CREATE TABLE `account_channel` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '姓名',`channel` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '账户渠道',`balance` int DEFAULT NULL COMMENT '余额',PRIMARY KEY(`id`)
)ENGINE=InnoDB;
#插入数据
INSERT INTO `account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('1','zhuge','wx','100');
INSERT INTO `account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('2','zhuge','alipay','200');
INSERT INTO `account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('3','zhuge', 'yinhang', '300');
INSERT INTO `account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('4','lilei','wx','200');
INSERT INTO `account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('5','lilei','alipay','100');
INSERT INTO `account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('6','hanmeimei', 'wx', '500');

  • 聚合函数over函数转换为窗口函数不再使用group 分组
  • overpartition表明分组计算方式

  • over若果不加条件使用整张运算

  • 专用窗口函数
  • ROW_NUMBER()分区每一行分配一个唯一行号1开始

  • RANK()排序结果添加序号,需要over使用order by语句
    • 存在相同排名并列相同排名序号
    • 存在相同排名下一行会跳过本应占用排序序号

  • DENSE_RANKRANK()不同存在相同排名不会跳过本应占用排名序号

12.默认字符集由latin1变为uft8mb4
  • 8.0之前默认字符集latin1utf8指向uft8mb3
  • 8.0版本默认字符uft8mb4utf8默认指向也是utf8mb4
13.MyISAM系统表全部换成InnoDB表
  • 系统mysql库)数据字典全部改为InnoDB存储引擎
  • 默认MySQL实例不包含MyISAM除非手动创建MyISAM
14.元数据存储变动

表结构.frm文件移除全部集中保存mysql.ibd

15.自增变量持久化
  • 测试数据
 create table t(id int auto_increment primary key,c1 varchar(20));insert into t(c1) values('zhuge1'),('zhuge2'),('zhuge3');

情景一删除id3数据后重启mysql插入数据自增id为4而不是3

情景:将id1数据修改id5插入数据自增id6而不是5

16.DDL原子化

一条DDL语句涉及多个操作要么同时成功要么同时失败

17.参数修改持久化
  • mysql8支持在线修改参数持久化配置文件mysqld-auto.cnf
  • 重启mysqlmysqld-auto.cnf配置优先级最高

相关文章:

  • 通过python安装小智语音服务器端
  • window nvidia-smi命令 Failed to initialize NVML: Unknown Error
  • Elabscience 精准识别 CD4+ T 细胞|大鼠源单克隆抗体 GK1.5,适配小鼠样本的流式优选方案
  • 强化学习算法实战:一个例子搞懂sarsa、dqn、ddqn、qac、a2c及其区别
  • 【生成式AI文本生成实战】DeepSeek系列应用深度解析
  • 读取toml, 合并,生成新文件
  • 最新开源 TEN VAD 与 Turn Detection 让 Voice Agent 对话更拟人 | 社区来稿
  • 【C++】STL简介
  • FC7300 ADC MCAL配置引导
  • 启用rvzi可视化自己的机器人发现joint state publisher gui没有滑块
  • 数据服务共享平台方案
  • 轨道炮--范围得遍历,map巧统计
  • 蓝牙协议架构与调试工具详解(含 BLE、HCI 命令、调试命令)
  • 25年2月通信基础知识补充2:延迟对齐调制、常见卫星移动速度
  • 方法区与元空间解析
  • Reth(冗余以太网接口) 和Bridge-Aggregation(链路聚合接口)区别
  • Spring模拟转账开发
  • Python爬虫(28)Python爬虫高阶:Selenium+Splash双引擎渲染实战与性能优化
  • LangGraph 官方文档翻译 - 快速入门及示例教程(聊天、工具、记忆、人工干预、自定义状态、时间回溯)
  • 【vue】适合大型项目的封装(接口,全局字典,表格表头)
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • “80后”萍乡市安源区区长邱伟,拟任县(区)委书记
  • 现场丨在胡适施蛰存等手札与文献间,再读百年光华
  • 中哥两国元首共同见证签署《中华人民共和国政府与哥伦比亚共和国政府关于共同推进丝绸之路经济带和21世纪海上丝绸之路建设的合作规划》
  • 【社论】个人破产探索,要守住“诚实而不幸”的底线
  • 李公明谈“全球南方”与美术馆