MySQL从入门到精通(第3版)
上QQ阅读APP看书,第一时间看更新

2.2 MySQL8.0的新特性

MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上较为流行的和标准化的数据库语言。MySQL的特性如下。

(1)使用C和C++语言编写,并使用了多种编译器进行测试,保证源代码的可移植性。

(2)支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。

(3)为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

(4)支持多线程,充分利用CPU资源。

(5)优化的SQL查询算法,有效地提高查询速度。

(6)既能够被作为一个单独的应用程序应用在客户端/服务器网络环境中,也能够被作为一个库而嵌入其他软件中以提供多语言支持,常见的编码,如中文的GB2312、BIG5,日文的Shift_JIS等都可以被用作数据表名和数据列名。

(7)提供TCP/IP、ODBC和JDBC等多种数据库连接途径。

(8)提供用于管理、检查、优化数据库操作的管理工具。

(9)可以处理拥有上千万条记录的大型数据库。

目前,MySQL的最新版本是MySQL 8.0,它比上一个版本(MySQL 5.7)具备更多新的特性。

(1)性能:MySQL 8.0的速度要比MySQL 5.7快2倍。MySQL 8.0在以下方面带来了更好的性能,包括读/写工作负载、I/O密集型工作负载,以及高竞争(hot spot—热点竞争问题)工作负载。

MySQL 8.0性能与MySQL 5.6、MySQL 5.7对比如图2.1所示。

图2.1 MySQL 8.0与MySQL 5.6、MySQL 5.7的性能对比

(2)NoSQL:从MySQL 5.7开始,提供NoSQL存储功能,在MySQL 8.0中这部分功能得到了更大的改进。该功能消除了对独立的NoSQL文档数据库的需求,而MySQL文档存储也为schema-less模式的JSON文档提供了多文档事务支持和完整的ACID合规性。

(3)窗口函数(window function):从MySQL 8.0开始,新增了窗口函数,可以用来实现若干种新的查询方式。窗口函数与SUM()、COUNT()这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中,即窗口函数不需要GROUP BY。

(4)隐藏索引:在MySQL 8.0中,索引可以被隐藏或被显示。当索引被隐藏后,它将不会被查询优化器使用。可以将这个特性用于性能调试,例如先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,则说明这个索引是有用的,然后将其恢复显示即可;如果数据库性能基本无变化,则说明这个索引是多余的,可以考虑删除它。

(5)降序索引:MySQL 8.0为索引提供了按降序方式进行排序的支持,在这种索引中的值也会按降序的方式进行排序。

(6)通用表表达式(common table expressions,CTE):在复杂的查询中使用嵌入式表时,使用CTE使得查询语句更清晰。

(7)UTF-8编码:从MySQL 8.0开始,使用utf8mb4作为默认字符集。

(8)JSON:MySQL 8.0大幅改进了对JSON的支持,添加了基于路径查询参数从JSON字段中抽取数据的JSON_EXTRACT()函数,以及用于将数据分别组合到JSON数组和对象中的JSON_ARRAYAGG()和JSON_OBJECTAGG()聚合函数。

(9)可靠性:InnoDB现在支持表DDL的原子性,也就是InnoDB表上的DDL也可以实现事务完整性,要么失败回滚,要么成功提交,不至于出现部分成功的问题。此外,InnoDB还支持crash-safe特性,元数据存储在单个事务数据字典中。

(10)高可用性(high availability):InnoDB集群为数据库提供了集成的原生HA解决方案。

(11)安全性:OpenSSL改进、新的默认身份验证、SQL角色、密码强度、授权。