MySQL专题总结(三)—— 补充篇

MySQL8与之前版本的区别:

  1. InnoDb引擎新增降序索引,通过命令show create table查看。

  2. mysql 8.0 对于group by 字段不再隐式排序,如需要排序,必须显式加上order by 子句。

  3. 增加invisible 关键字隐藏索引(对主键字段不可用),invisible相当于对索引实现软删除,结合查询优化器,方便我们排查该索引对s'q'l的影响。对于大表,可以确认其索引可删,才删除,否则就修改其可见性。

  4. 增加函数索引,函数索引基于虚拟列功能实现,在MySQL中相当于新增了一个列,这个列会根据你的函数来进行计算 结果,然后使用函数索引的时候就会用这个计算后的列作为索引。

  5. innodb存储引擎的共享锁和排他锁增加nowait,skip locked语法。在5.7及之前的版本,select...for update,如果获取不到锁,会一直等待,直到 innodb_lock_wait_timeout超时。在8.0版本,通过添加nowait,skip locked语法,能够立即返回。如果查询的行已经加锁,那么nowait 会立即报错返回,而skip locked也会立即返回,只是返回的结果中不包含被锁定的行。 应用场景比如查询余票记录,如果某些记录已经被锁定,用skip locked可以跳过被锁定的记录,只返 回没有锁定的记录,提高系统性能。

  6. 新增innodb_dedicated_server自适应参数。能够让InnoDB根据服务器上检测到的内存大小自动配置innodb_buffer_pool_size, innodb_log_file_size等参数,会尽可能多的占用系统可占用资源提升性能。解决非专业人员安装数据 库后默认初始化数据库参数默认值偏低的问题,前提是服务器是专用来给MySQL数据库的,如果还有 其他软件或者资源或者多实例MySQL使用,不建议开启该参数,不然会影响其它程序。

  7. 增加了一个新的动态变量 innodb_deadlock_detect,用于控制系统是否执行 InnoDB 死锁检查,默认是打开的。死锁检测会耗费数据库性能的,对于高并发的系统,我们可以关闭死锁检测功能,提高系统性能。但是我们要确保系统极少情况会发生死锁,同时要将锁等待超时参数调小一点,以防出现死锁等待过久的情况。

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

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

  10. 增加窗口函数over(),但是分组后并不会合并结果,而是将结果放回多行当中。在聚合函数后面加上over()就变成分析函数了,后面可以不用再加group by制定分组,因为在over里已经用partition关键字指明了如何分组计算,这种可以保留原有表数据的结构,不会像分组聚合函数那样每组只返回一条数据。

  11. 默认字符集由latin1变为utf8mb4

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

  13. 元数据存储变动,例如表结构.frm等文件(删除),全部集中放入mysql.ibd文件里。

  14. 自增变量持久化,解决在某些情况下会导致业务主键冲突或者其他难以发现的问题,比如原来重启会重置主键AUTO_INCREMENT=max(primary key)+1。现在持久化后,重启,该值将不会改变。

  15. MySQL 8.0 开始支持原子 DDL 操作,其中与表相关的原子 DDL 只支持 InnoDB 存储引擎。一个原子DDL 操作内容包括:更新数据字典,存储引擎层的操作,在 binlog 中记录 DDL 操作。支持与表相关的 DDL:数据库、表空间、表、索引的 CREATE、ALTER、DROP 以及 TRUNCATE TABLE。支持的

    其它 DDL :存储程序、触发器、视图、UDF 的 CREATE、DROP 以及ALTER 语句。支持账户管理相关的 DDL:用户和角色的 CREATE、ALTER、DROP 以及适用的 RENAME等等。

  16. 参数修改持久化。MySQL 8.0版本支持在线修改全局参数并持久化,通过加上PERSIST关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中,重启MySQL时,可以从该配置文件获取到最新的配置参数。set global 设置的变量参数在mysql重启后会失效。

相关推荐
2401_835956815 分钟前
Golang怎么写基准测试benchmark_Golang基准测试教程【完整】
jvm·数据库·python
阿杰学AI44 分钟前
AI核心知识129—大语言模型之 向量数据库(简洁且通俗易懂版)
数据库·人工智能·ai·语言模型·自然语言处理·向量数据库·vector database
SPC的存折1 小时前
D在 Alpine 容器中手动搭建 Discuz 全攻略(包含镜像一键部署脚本,可直接用)
linux·数据库·mysql·缓存
李兆龙的博客1 小时前
从一到无穷大 #67 大查询根因分析 - 从 PinSQL 到 RCRank
数据库·时序数据库
AgCl231 小时前
MYSQL-6-函数与约束-3/17
android·数据库·mysql
junqiduhang1 小时前
Win11 MySQL 8.0 安装八步走
数据库·mysql
zhangchaoxies1 小时前
golang如何使用SQLx原生SQL查询_golang SQLx原生SQL查询使用方法
jvm·数据库·python
m0_743623921 小时前
mysql如何优化InnoDB缓冲池大小_mysql缓冲池内存调优
jvm·数据库·python
孟意昶1 小时前
Doris专题31-SQL手册-基础元素
大数据·数据库·数据仓库·分布式·sql·知识图谱·doris
m0_617881421 小时前
如何操作 XML 数据_XMLTYPE 与 EXTRACT 函数解析节点
jvm·数据库·python