MySQL8.0新特性初探

最近MySQL发布了被期待已久的8.0,GA版本为8.0.11,可以说是喜大普奔了,MySQL发行版本可以参照:MySQL版本区分 ,下面来介绍一下MySQL8.0版本的新特性:

1. 事务型数据字典

        完全脱离了MyISAM,可以将数据字典放到InnoDB表中。取消了之前版本的元数据文件((frm, par, trn, trg, isl,db.opt)),例如在8.0中,"mysql"数据库的innodb表全部放至在datadir下的mysql.ibd中;将不再把表结构放在.frm文件中,而是存放在元数据表中:

        由于MySQL采用统一Server层+不同的底层引擎插件的架构模式,在Server层为每个表创建了frm文件,以保存与表定义相关的元数据信息。然而某些引擎(例如InnoDB)本身也会存储元数据,这样不仅产生了元数据冗余,而且由于Server层和引擎层分别各自管理,在执行DDL之类的操作时,很难做到crash-safe,更别说让DDL具备事务性了。

        在MySQL8.0之前,DDL操作在server crash的情况下,会遗留.frm,.ibd文件。MySQL8.0 能实现原⼦DDL(包括 DROP TABLE, DROP SCHEMA, CREATE TABLE, TRUNCATE TABLE, ALTER TABLE),在server crash的情况下,不会遗留.frm,.ibd临时文件,保证了DDL操作的原子性!

2. 角色管理

        角色----系列权限的集合

3. 在sql中配置变量

         例如在使用结果集大的sql中,使用

            SELECT      /*+ SET_VAR(optimizer_switch = 'mrr_cost_based=off') */  *   FROM t1;

参考:New optimizer hint for changing the session system variable

3.默认字符集

        从latin1改为utf6m64

So, MySQL官网加了个emoji:

MySQL8.0新特性初探_第1张图片

4. 不可见的索引(隐藏索引)

        通过隐藏索引,可以在SQL优化的时候,不需要删除索引,就可以使用不可见索引进行删除之后的效果测试!

5. 持续性的全局变量

        innodb缓冲池现在可以估算主内存中有多少的表和索引,这可以让优化器选择访问方式时知道数据是否可以存储在内存中还是必须存在存储上

6. 重构BLOB

        加速了片段读取、更新操作。可以加速JSON数据的操作

7. 重构sql分析器

8. 成本模型

         即直方图模型,在默认的优化器(optimizer)中,会认为所有的数据的分布是平均的(事实却不是,例如睡觉的时间通常在11:00 p.m,而非3:00 p.m)。可以通过创建直方图模型,优化optimizer的的选择更优。

9. 在多线程(multi-threads replication)复制中使用了writeset

    writeset信息记录了多个事务里是否会对相同数据进行变更,若无,则可以并发执行,较5.7的多线程复制上升了一个档次。通过参数  binlog_transaction_dependency_tracking 可以进行配置

10. 持久化自增值(解决了#199的bug)

        会持久化保持自增序列的最大值到redo,即实例重启后不再以自增字段max value+1作为自增值了!!喜大普奔啊

**InnoDB enhancements. ** These `InnoDB` enhancements were added:

    *  A server restart no longer cancels the effect of the `AUTO_INCREMENT = N` table option. If you initialize the auto-increment counter to a specific value, or if you alter the auto-increment counter value to a larger value, the new value is persisted across server restarts.

    *  A server restart immediately following a [`ROLLBACK`](https://dev.mysql.com/doc/refman/8.0/en/commit.html "13.3.1 START TRANSACTION, COMMIT, and ROLLBACK Syntax") operation no longer results in the reuse of auto-increment values that were allocated to the rolled-back transaction.

    *  If you modify an `AUTO_INCREMENT` column value to a value larger than the current maximum auto-increment value (in an[`UPDATE`](https://dev.mysql.com/doc/refman/8.0/en/update.html "13.2.12 UPDATE Syntax") operation, for example), the new value is persisted, and subsequent [`INSERT`](https://dev.mysql.com/doc/refman/8.0/en/insert.html "13.2.6 INSERT Syntax") operations allocate auto-increment values starting from the new, larger value.

11. 改进扫描性能

12. 取消临时表

        取消对压缩临时表的支持,并存储临时表的元数据到内存中

13. 表空间加密

    The `InnoDB` [tablespace encryption feature](https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html "15.7.11 InnoDB Tablespace Encryption") supports encryption of redo log and undo log data

你可能感兴趣的:(MySQL8.0新特性初探)