当前位置: 首页 > news >正文

Mysql基础篇(10)—— MySQL8.0新特性概览

新增的新特性

  • 更简便的NoSQL支持。
  • 更好的索引,新增了隐藏索引降序索引隐藏索引可以用来去掉索引对查询性能的影响。在查询中混合存在多列索引时,使用降序索引可以提高查询的性能。
  • 更完善的JSON支持,增加了聚合函数,JSON_ARRAYAGG()JSON_OBJECTAGG(),将参数聚合为JSON数组或对象,新增了行内操作符->>,是列路径运算符->的增强,对JSON排序做了提升,并优化了JSON的更新操作。
  • 安全和账户管理,新增了caching_sha2_password授权插件、角色、密码历史记录和FIPS模式支持,这些提高了数据库的安全性。
  • InnoDB的变化,InnoDB是MySQL默认的存储引擎,是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。在MySQL8.0中,InnoDB在自增、索引、加密、死锁、共享锁等方面做了大量的改进和优化,并且支持原子数据定义语言(Automic DDL),提高了数据安全性,对事务提供更好的支持。
  • 数据字典,在之前的MySQL版本中,字典数据都存储在元数据文件和非事务表中。从MySQL8开始,新增了事务数据字典,在这个字典里存储着数据库对象信息,这些数据字典存储在内部事务表中。
  • 原子数据定义语句(Automic DDL, 也叫原子DDL),MySQL8开始,InnoDB支持。原子DDL将与DDL操作相关的数据字典更新、存储引擎操作、二进制日志谢日结合到一个单独的原子事务中,这使得及时服务器崩溃,事务也会提交或回滚。使用支持原子操作的存储引擎所创建的表,在执行DROP TABLE、CREATE TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、CREATE TABLESPACE、DROP TABLESPACE等操作时,都支持原子操作,即事务要么完全操作成功,要么失败后回滚,不在进行部分提交。
  • 资源管理,开始支持创建和管理资源组。
  • 字符集支持,默认的字符集从latin1更改为utf8mb4,并首次添加了日语所特定使用的集合,utf8mb4_ja_0900_as_cs。
  • 优化器增强,MySQL优化器开始支持隐藏索引降序索引。隐藏索引不会被优化器使用,验证索引的必要性时不需要删除索引,先将索引隐藏,如果优化器性能无影响就可以真正地删除索引。降序索引允许优化器对多个列进行排序,并且允许排序顺序不一致。
  • 公用表表达式(Common Table Expressions),简称为CTE,MySQL现在支持递归非递归两种形式地CTE。CTE通过在SELECT语句或者其他特定语句前使用WITH语句对临时结果集进行命名。
  • 窗口函数,开始支持窗口函数,之前版本的大部分聚合函数在MySQL8中也可以作为窗口函数来使用。
  • 正则表达式支持,MySQL在8.0.4以后的版本中,采用支持Unicode的国际化组件库实现正则表达式操作,这种方式不仅能提供完全的Unicode支持,而且时多字节安全编码。MySQL增加了REGEXP_LIKE()、 EGEXP_INSTR()、REGEXP_REPLACE()和 REGEXP_SUBSTR()等函数来提升性能。另外,regexp_stack_limit和regexp_time_limit 系统变量能够通过匹配引擎来控制资源消耗。
  • 内部临时表,TempTable存储引擎取代MEMORY存储引擎成为内部临时表的默认存储引擎。TempTable存储引擎为VARCHAR和VARBINARY列提供高效存储。internal_tmp_mem_storage_engine会话变量定义了内部临时表的存储引擎,可选的值有两个,TempTable和MEMORY,其中TempTable为默认的存储引擎。temptable_max_ram系统配置项定义了TempTable存储引擎可使用的最大内存数量。
  • 日志记录,在MySQL8中错误日志子系统由一系列MySQL组件构成。这些组件的构成由系统变量log_error_services来配置,能够实现日志事件的过滤和写入。
  • 增强的MySQL复制,MySQL8复制支持对JSON文档进行部分更新的二进制日志记录,该记录使用紧凑的二进制格式,从而节省记录完整JSON文档的空间。当使用基于语句的日志记录时,这种紧凑的日志记录会自动完成,并且可以通过将新的binlog_row_value_options系统变量值设置为PARTIAL_JSON来启用。

移除的旧特性

  • 查询缓存,删除的项有
    • 语句,FLUSH QUERY CACHERESET QUERY CACHE
    • 系统变量,query_cache_limit、query_cache_min_res_unit、query_cache_size、query_cache_type、query_cache_wlock_invalidate
    • 线程变量,checking privileges on cached query、checking query cache for query、invalidating query cache entries、sending_cached result to client、storing result in query cache、waiting for query cache lock
  • 加密相关,删除的内容有:ENCODE()DECODE()ENCRYPT()DES_ENCRYPT()DES_DECRYPT()函数,配置项des-key-file,系统变量have_crypt,FLUSH语句的DES_KEY_FILE选项,HAVE_CRYPT CMake选项。对于移除的ENCRYPT()函数,考虑使用SHA2()替代,对于其他移除的函数,使用AES_ENCRYPT()AES_DECRYPT()替代
  • 空间函数相关,只保留了ST_MBR函数
  • \N和NULL,在SQL语句中,解析器不再将\N视为NULL,所以在SQL语句中应使用NULL代替\N。这项变化不会影响使用LOAD DATA INFILE 或者SELECT…INTO OUTFILE操作文件的导入和导出。在这类操作中,NULL仍等同于\N
  • mysql_install_db,被移除,数据字典的初始化需要调用带着initialize或者--initialize-insecure选项的mysqld来代替实现。另外,--bootstrapINSTALL_SCRIPTDIRCMake也被删除。
  • 通用分区处理程序,被移除,为了实现给定表分区,表所使用的存储引擎需要自有的分区处理程序。提供本地分区支持的MySQL存储引擎有两个,即InnoDB和NDB,而在MySQL8中只支持InnoDB
  • 系统和状态变量信息,在INFORMATION_SCHEMA数据库中,对系统和状态变量不在进行维护。GLOBAL_VARIABLESSESSION_VARIABLESGLOABL_STATUSSESSION_STATUS表都已被删除。另外,系统变量show_compatibility_56也已被删除。被删除的状态变量还有Slave_retried_transactionsSlave_running。以上被删除的内容都可以使用性能模式中对应的内容进行代替。
  • mysql_plugin工具,mysql_plugin工具用来配置MySQL服务器插件,现已被删除,可使用--plugin-load或者--plugin-load-add选项在服务器启动时加载插件或者在运行时使用INSTALL PLUGIN语句加载插件来替代该工具。

相关文章:

  • 网站建设所有软件清单/中央新闻
  • 基础很差去公司做网站/站长之家新网址
  • 做物流的都是上什么网站/优化网站推广
  • 【高并发内存池】第一弹之定长内存池
  • 在农业银行做开发是什么样的体验?
  • wget爬虫方法
  • Mysql之增强查询
  • Rockchip开发系列 - 9.watchdog看门狗开发
  • DRG简介
  • C/C++之(五)洛谷刷题基础题 --- 新年好
  • 【异常】记一次因修复漏洞扫描导致SpringSecurity出现的循环依赖问题
  • 使用SpringBoot创建web项目,并使用外部Tomcat
  • 【地铁上的Redis与C#】数据类型(七)--List类型
  • java 探花交友项目实战 day3 完善个人信息 阿里云OSS文件存储 百度人脸识别
  • 【代码随想录】动态规划:关于01背包问题,你该了解这些!(滚动数组)