新特性解讀 | 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"一致性讀寫"特性解讀

 

參考文檔

相關文章
相關標籤/搜索