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 不能指定分组列的 [ASC| DESC],要排序只能用 order by
// 与5.0、5.1相关的一些旧属性,不再支持,removed
7.InnoDB不再使用软连接创建数据目录之外的表空间,可以用 variable innodb_directories = ...