新特性解读 | MySQL 最新的release notes(转载)

原创做者公众号:yangyidbahtml


 

从MySQL发布正式版本8.0.11以来,MySQL又相继发布8.0.12-8.0.15四个版本,本文着重介绍MySQL 8.0.13和8.0.14 版本中值得关注的改进点。mysql

为何不关注8.0.15,由于8.0.15的release notes 基本没啥信息。算法

 

MySQL 8.0.13

部分改进和特性

1.提升SELECT COUNT() FROM tbl_name 语句的查询速度,注意只针对没有where条件的SQL或者没有其余group by的查询语句。例如 select count() from t where a=x 则不能优化。sql

2.支持Skip Scan access有点像跳跃索引扫描,看官方的例子:数据库

CREATE TABLE t1 (f1 INT NOT NULL, f2 INT NOT NULL,
PRIMARY KEY(f1, f2));
INSERT INTO t1 VALUES (1,1), (1,2), (1,3), (1,4), (1,5),
(2,1), (2,2), (2,3), (2,4), (2,5);
INSERT INTO t1 SELECT f1, f2 + 5 FROM t1;
INSERT INTO t1 SELECT f1, f2 + 10 FROM t1;
INSERT INTO t1 SELECT f1, f2 + 20 FROM t1;
INSERT INTO t1 SELECT f1, f2 + 40 FROM t1;
ANALYZE TABLE t1;
EXPLAIN SELECT f1, f2 FROM t1 WHERE f2 > 40;

 

新的算法的执行伪算法以下:安全

 

优化器能使用Skip Scan access必须知足:并发

1 select的字段必须都在组合索引中,也即知足覆盖索引的条件。
2 索引最左前缀不在where条件中。(a,b,c,d) a 不在where 条件中,可是b c必须在。
3 查询只能涉及到一个单表。
4 查询sql不能使用group by 或者distinct
5 where 条件中必须有非最左前缀必须有范围查询,好比索引是(a,b,c) where b>20 .

我的感受这个特性颠覆了DBA常常告诉开发的最左前缀原则,是对不合适索引设计的补充。尽管MySQL优化器愈来愈强大,可是开发建立索引时仍是要尽量的知足最左前缀原则,也能够参考 干货 | 解读MySQL 8.0新特性:Skip Scan Rangeapp

 

3.还有其余是数据文件加密和MRG相关改进,有兴趣的能够本身去看看。运维

之后要废弃且在将来的版本中移除的参数和特性优化

1.之后不在支持存放分区表在共享表空间。

2.CREATE TEMPORARY TABLE 的语法之后废弃 TABLESPACE = innodb_file_per_table and TABLESPACE = innodb_temporary 的属性。

3.废弃utf8mb3字符集,请使用utf8mb4代替。话说应该不多人用utf8mb3字符集吧。

4.移除 metadata_locks_cache_size 和metadata_locks_hash_instances。

5.废弃sql_mode:PAD_CHAR_TO_FULL_LENGTH,而且在将来的版本中移除。

 

MySQL 8.0.14 部分改进和特性

1.加强系统可运维性,增长管理员链接地址,在MySQL系统链接满的状况下,管理员能够经过admin_address登陆数据库进行维护操做。其实这个相似管理端口的功能。

2.支持帐号设置双密码,修改底层密码时系统能够更平滑,提供系统安全性和稳定性。例如:

ALTER USER 'appuser1'@'host1.example.com' IDENTIFIED BY 'password_b' RETAIN CURRENT PASSWORD;

3.以前的8.0版本是系统默认建立2个undo表空间,新版本支持建立额外的undo表空间而且能够在运行时删除额外的undo表空间。

CREATE UNDO TABLESPACE tablespace_name ADD DATAFILE 'file_name.ibu'; DROP UNDO TABLESPACE tablespace_name;

还能够经过alter命令动态的设置undo 表空间的ACTIVE|INACTIVE状态。

4.支持并发聚族索引读取,提升check table的速度。其并发数量由innodb_parallel_read_threads 控制,默认是4,须要注意的是该功能不支持辅助索引。

5.当innodb_dedicated_server为开启时,log file的数量和大小能够根据系统的buffer pool size 自动调整。以前的版本是根据os系统的内存大小设置的,并且log file的数量不是自动调整的。注意: 若是不是独享物理机,官方文档并不推荐打开该参数,具体能够参考官方文档。

6.alter table命令支持in-place的方式修改字符集了,不过须要知足以下三个条件:

a. 字符集类型是char,varchar,text或者enum

b. 字符集类型从utf8mb3 修改成utf8mb4,或者由任意字符集修改成binary

c. 被修改的字段非索引字段

7.MRG新增参数 group_replication_consistency 控制集群数据一致性,防止集群容灾切换时,新的主库没有应用完backlog,业务请求访问新的主库可能会读取老的数据。该参数有EVENTUAL,BEFORE_ON_PRIMARY_FAILOVER,BEFORE,AFTER,BEFORE_AND_AFTER 四个值。默认为EVENTUAL,能够不等日志应用完成便可读写。若是设置为 BEFORE_ON_PRIMARY_FAILOVER 则新的读写请求会被阻塞住,直到日志被应用完成,详细信息参考 社区投稿 | MySQL MGR"一致性读写"特性解读

 

参考文档

相关文章
相关标签/搜索