MySQL数据库工程师入门实战课程视频教程
4208 人在学
整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储
不可见索引,开始支持invisible index,在优化SQL的过程中可以设置索引为不可见,优化器不会利用不可见索引
支持降序索引,可以对索引定义 DESC,之前,索引可以被反序扫描,但影响性能,而降序索引就可以高效的完成
支持RANK(), LAG()、NTILE()等函数
正则表达式增强,提供了REGEXP_LIKE(),EGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR()等函数
新增备份锁,允许在线备份期间的DML,同时防止可能导致快照不一致的操作。 备份锁由LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE语法支持
默认字符集由latin1变为utf8mb4
MySQL 8.0版本支持在线修改全局参数持久化,通过加上PERSIST关键字,可以将调整持久化到新的配置文件中,再次重启db还可以应用到最新的参数。对于加上 PERSIST 关键字修改参数命令,MySQL系统会生成一个包含json格式数据的 mysqld-auto.cnf 文件,比如执行:
set PERSIST binlog_expire_logs_seconds = 604800 ; #内存和json文件都修改,重启还生效
set GLOBAL binlog_expire_logs_seconds = 604800 ; #只修改内存,重启丢失
系统会在数据目录下生成一个包含如下内容的 mysqld-auto.cnf 的文件:
{ "mysql_server": {" binlog_expire_logs_seconds ": "604800" } }
当 my.cnf 和 mysqld-auto.cnf 同时存在时,后者具有高优先级。
MySQL 8.0 版本开始支持期待已久直方图。优化器会利用column_statistics的数据,判断字段的值的分布,得到更准确的执行计划。
可以使用 ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS |DROP HISTOGRAM ON clo_name] 来收集或者删除直方图信息
支持会话级别SET_VAR 动态调整部分参数,有利于提升语句性能。
参考select /*+ SET_VAR(sort_buffer_size = 16M) */ id from test order id ; insert /*+ SET_VAR(foreign_key_checks=OFF) */ into test(name) values(1);
废除buffer pool mutex, 将原来一个mutex拆分成多个,提高并发拆分LOCK_thd_list 和 LOCK_thd_remove 这两个mutex,大约可提高线程链接效率5%。
1、行缓存
MySQL8.0的优化器可以估算将要读取的行数,因此可以提供给存储引擎一个合适大小的row buffer来存储需要的数据。大批量的连续数据扫描的性能将受益于更大的record buffer。
2、改进扫描性能
改进InnoDB范围查询的性能,可提升全表查询和范围查询 5-20%的性能。
3、成本模型
InnoDB缓冲区可以估算缓存区中的有多少表和索引,这可以让优化器选择访问方式时知道数据是否可以存储在内存中还是必须存储到磁盘上。