博客
关于我
Mysql8.0的特性
阅读量:790 次
发布时间:2023-02-11

本文共 2022 字,大约阅读时间需要 6 分钟。

MySQL 8.0 引入了许多新功能和改进特性,值得数据库管理员和开发人员关注和掌握。以下是本次更新中最重要的特性解读:

1. 降序索引

MySQL 8.0 允许在创建索引时指定 desc 关键字,从而实现降序索引。这种方式可以在索引创建时直接指定排序规则,简化了对排序需求的配置。

示例:

create table t1(c1 int, c2 int, index idx_c1_c2(c1, c2 desc));

2. Group by 不再隐式排序

MySQL 5.7 及以前版本会在执行 group by 时对分组字段进行隐式排序,但从 MySQL 8.0 起,这一功能被移除。为了保持与其他数据库一致,用户需要在 group by 后手动添加 order by 子句来指定排序逻辑。

示例:

select count(*), c2 from t1 group by c2 order by c2;

3. 隐藏索引

新增支持隐藏索引功能,适用于以下场景:

  • 不确定某个索引是否仍在使用,避免在大数据量下无效索引的删除操作。
  • 新创建的索引在测试环境中可能无效,但仍需维护。

隐藏索引的使用需注意:

  • 隐藏索引不会影响当前会话的性能,但会影响后续会话。
  • 需要在会话级别启用隐藏索引功能。

示例:

create table t2(c1 int, c2 int, index idx_c1(c1), index idx_c2(c2) invisible);

4. 函数索引

新增支持在索引中使用函数运算后的值。这种方式可以优化查询性能,但需要在 where 条件中使用相同函数来确保一致性。

示例:

create index func_idx on t3((UPPER(c2)));

5. InnoDB 锁等待跳过

MySQL 8.0 增加了 NOWAITSKIP LOCKED 语法,允许查询不等待锁或跳过当前锁定状态。

  • NOWAIT 会立即报错而不是等待超时。
  • SKIP LOCKED 会跳过当前锁定记录,返回其他未锁定数据。

示例:

select * from t1 where c1 = 2 for update nowait;select * from t1 for update skip locked;

6. InnoDB 专属服务器参数

新增 innodb_dedicated_server 参数,可根据服务器空闲性能自动配置 InnoDB 缓冲池和日志文件大小。

注意事项:

  • 建议仅在专用 MySQL 服务器上启用该参数,以避免对其他中间件造成影响。

7. 死锁检查控制

新增动态变量 innodb_deadlock_detect,默认开启。可以通过禁用该变量提高性能,但需谨慎以防死锁风险。

示例:

show variables like '%innodb_deadlock_detect%';

8. Undo 文件不再使用系统表空间

MySQL 8.0 默认在数据目录下创建两个 UNDO 表空间,独立于系统表空间,不再使用旧表空间存储 UNDO 数据。

优势:

  • 提高数据恢复性能。
  • 减少系统表空间的管理开销。

9. Binlog 日志过期时间精确到秒

默认使用 binlog_expire_logs_seconds 参数,精确到秒。

示例:

show variables like '%binlog_expire_logs_seconds%';

10. 窗口函数(Window Functions)

新增窗口函数支持,可直接在查询结果中添加分析函数结果,而无需使用 group by

示例:

select c2, sum(c1) over (order by c1) as sum_c1 from t1;

11. 默认字符集变为 UTF-8mb4

MySQL 8.0 的默认字符集改为 UTF-8mb4,支持完整的 Unicode 符号。

注意事项:

  • 旧数据库字符集需特别注意,可能导致存储和排序逻辑的变化。

12. MyISAM 系统表全换成 InnoDB

MySQL 8.0 默认不再支持 MyISAM 存储引擎,所有系统表和数据字典表改为 InnoDB。

13. 自增变量持久化

解决了自增变量持久化问题,确保变量值在重启后保持一致。

14. DDL 原子化

InnoDB 表的 DDL 操作支持事务完整性,成功或回滚。

示例:

drop table t1, t2; -- 8.0 版本会回滚操作

15. 参数修改持久化

新增支持在线修改全局参数并持久化,通过 PERSIST 关键字将修改保存至配置文件。

示例:

set persist innodb_lock_wait_timeout=25;

以上是 MySQL 8.0 的主要新特性,未来版本的数据库管理和应用开发需要充分利用这些功能以提高效率和稳定性。

转载地址:http://vnbfk.baihongyu.com/

你可能感兴趣的文章
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS SQL查询库、表、列数据结构信息汇总
查看>>
MS UC 2013-0-Prepare Tool
查看>>
MSBuild 教程(2)
查看>>
msbuild发布web应用程序
查看>>
MSB与LSB
查看>>
MSCRM调用外部JS文件
查看>>
MSCRM调用外部JS文件
查看>>
MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
查看>>
MsEdgeTTS开源项目使用教程
查看>>
msf
查看>>
MSP430F149学习之路——SPI
查看>>
msp430入门编程45
查看>>
MSSQL数据库查询优化(一)
查看>>
MSSQL数据库迁移到Oracle(二)
查看>>
MSSQL日期格式转换函数(使用CONVERT)
查看>>
MSTP多生成树协议(第二课)
查看>>
MSTP是什么?有哪些专有名词?
查看>>
Mstsc 远程桌面链接 And 网络映射
查看>>