1. 程式人生 > >新特性解讀 | MySQL 最新的release notes(轉載)

新特性解讀 | MySQL 最新的release notes(轉載)

原創作者公眾號:yangyidba


 

從MySQL釋出正式版本8.0.11以來,MySQL又相繼釋出8.0.12-8.0.15四個版本,本文著重介紹MySQL 8.0.13和8.0.14 版本中值得關注的改進點。

為什麼不關注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 則不能優化。

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 Range

 

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

 

參考文件