MySQL 01. What is New in MySQL8.0?
總體講,並沒有什麼非常亮眼的改進,比較值得稱讚的只有 data directory!
一、新增特性
1.system data directory:取代engine data diractory. 並且實現“事務、redo log、data directory”三者的原子操作
即不會再有這樣的情況:明明已經刪除了一個表,但是data directory進行更新時宕機,那麼就會導致這個表既無法再建,也無法再刪除;
2.安全:
mysql.user engine = InnoDB;mysql 使用獨立的表空間mysql.ibd,located in data dir;
role privilege: session 別
user categories :使用者分類管理
privileges partial revoke
grant 語句中,隱藏授權者和密碼,但是不影響複製;
密碼策略更嚴謹,且有雙密碼策略;
schema/ table encryption
3.資源分組化管理:授予不同的workload
4.InnoDB:
auto-incre persist
index tree crash safe : add flag to redo
memocached support range query and multi-get
dynamic deadlock detect
information_schema.innodb_cached_indexes:可以查詢緩衝池中的索引頁
select ... for share/ update :nowait / skip locked
online undo keyspaces define, more rollback segments
redo log :實現並寫
5.algorithm = INSTANT:僅支援data directory,實現瞬時的、無lock的update
6.optimizer:
隱藏索引:可用於測試優化器
降序索引
in / exists:等值 + union
臨時表空間:緩衝池中,engine = TempTable;disk上,engine=InnoDB;
7.redo log archiving:熱備期間,防止redo被覆寫
8.clone plugin:remote instance/ replication effient/ distributed recovery
9.等值連線時,hash join >> block-nested loop algorithm,連線列索引不是必須的
相關引數:optimizer_switch, join_buffer_size, open_files_limit(溢位臨時表在disk上的檔案限制)
分析詳情:explain [ format=TREE | analyze ] sql statement; 分析器計算的成本可以和實際查詢成本進行比較!
10.檢視new可以基於現有的檢視old建立,old如果被刪除,則new亦不可用;old刪除之後再建,new亦可用;
11.cast函式注入查詢:
二、移除舊特性
1.innodb_locks_unsafe_for_binlog 與 RC level相似,移除
2.information_schema中與Innodb相關檢視,修改為基於data directory的系統檢視,重新命名;
3.禁止grant建立user,identified with auth_plugin by 'password',function password() 移除;
4.QC相關全部移除:其實可以作為引數提供給優化器,不用每個SQL都考量最佳執行計劃
5.sync_frm removed:frm is obsolete => data directory
6.Group By order by [ASC| DESC | NULL], default NULL
// 與5.0、5.1相關的一些舊屬性,不再支援,removed
7.InnoDB不再使用軟連線建立資料目錄之外的表空間,可以用 variable innodb_directories = ...