myql-各版本特性

4.1

2002年发布的4.0 Beta版,至此MySQL终于蜕变成一个成熟的关系型数据库系统。
2002年mysql4.1版本增加了子查询的支持,
字符集增加UTF-8,
GROUP BY语句增加了ROLLUP,
MySQL.user表采用了更好的加密算法。
支持每个innodb引擎的表单独放到一个表空间里。innodb通过使用MVCC(多版本并发控制)来获取高并发性,并且实现sql标准的4种隔离级别,同时使用一种被称成next-key locking的策略来避免幻读(phantom)现象。
除此之外innodb引擎还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈西索引(adaptive hash index)、预读(read ahead)等高性能技术。

5.0

mysql-5.0版本之前,myisam默认支持的表大小为4G。
从mysql-5.0以后,myisam默认支持256T的表单数据。
myisam只缓存索引数据。
加入了存储过程、服务器端游标、触发器、视图、分布式事务(Xa transactions)、查询优化器的显著改进以及其他的一些特性

5.1

20o8年发布的MySQL 5.1 的版本,基本上就是一个增加了崩溃恢复功能的MyISAM,使用表级锁,但可以做到读写不冲突,即在进行任何类型的更新操作的同时都可以进行读操作,但多个写操作不能并发

5.5

2010年12月发布mysql5.5版本默认存储引擎更改为InnoDB 多个回滚段(Multiple Rollback Segments)
,之前的innodb版本最大能处理1023个并发处理操作,
现在mysql5.5可以处理高达128K的并发事物 改善事务处理中的元数据锁定。例如,事物中一个语句需要锁一个表,会在事物结束时释放这个表,而不是像以前在语句结束时释放表。
增加了INFORMATION_SCHEMA表,新的表提供了与InnoDB压缩和事务处理锁定有关的具体信息。
默认InnoDB plugin引擎。具有提交、回滚和crash恢复功能、ACID兼容
行级锁(一致性的非锁定读 MVCC)
表与索引存储在表空间、表大小无限制
支持dynamic(primary key缓存内存 避免主键查询引起的IO )与compressed(支持数据及索引压缩)行格式
InnoDB plugin文件格式Barracuda、支持表压缩、节约存储、提供内存命中率、truncate table速度更快
原InnoDB只有一个UndoSegment,最多支持1023的并发;现在有128个Segments,支持128K个并发(同样,解决高并发带来的事务回滚)
Innodb_thread_concurrency默认为0,线程并发数无限制,可根据具体应用设置最佳值
Innodb_io_capacity可以动态调整刷新脏页的数量,改善大批量更新时刷新脏页跟不上导致的性能下降问题。Default:200,跟硬盘的IOPS有关
充分利用CPU多核处理能力innodb_read_io_threads阈值:1-64innodb_write_io_threads 阈值:1-64根据数据库的读写比灵活设置,充分发挥多CPU、高性能储设备的性能,不支持动态加载
自适应刷新脏页
热数据存活更久
buffer pool多实例:innodb_buffer_pool_instances 参数增加innodb_buffer_pool实例个数,大大降低buffer pool的mutex争抢过热情况
Linux上实现异步IO
重新支持组提交
稳定性提升
支持半同步Replication
增加Relay Log 自我修复功能
Crash recovery
引入红-黑树做插入排序的中间数据结构,时间复杂度大大降低,减少恢复时间
Thread Pool 分组排队限流

5.6

2013年2月发布,mysql5.6版本其中InnoDB可以限制大量表打开的时候内存占用过多的问题InnoDB性能加强。如大内存优化等InnoDB死锁信息可以记录到 error 日志,
方便分析InnoDB提供全文索引能力
默认参数的改变
Back_log排队队列
支持全文索引
支持online DDL create,alter,drop
可以在建表时指定表空间位置
create table external (x int unsigned not null primary key)data directory = ‘/volumes/external1/data’;
新增参数innodb_page_size可以设置page大小
整合了memcached API,可以使用API来直接访问innodb表,并非SQL(减少SQL解析、查询优化代价)
innodb只读事务,不需要设置TRX_ID字段
减少内部数据结构开销,减少read view
仅仅非只读事务依然需要TRX_ID
innodb改进
innodb表空间在线迁移(TransportableTablespaces)
undo log可独立出系统表空间
redo log最大可增长到512G
innodb后台线程独立出来
优化器改进
ICP
可以在引擎层直接过滤数据,避免二次回表节省BP空间,提高查询性能
BKA, 全称Batch Key Access
SQL通过辅助索引要访问表数据时候,将大量的随机访问放入缓存,交给MRR接口合并为顺序访问
MRR,全称Multi Range Read
在BKA算法应用之后,通过MRR接口合并随机访问为顺序访问,再去检索表数据。变大量随机为顺序访问。在通过辅助索引检索大量数据时,性能提升明显磁头无需来回寻道,page只需读取一次,且较好利用了innodb线性预读功能(每次预读64个连续page)
统计信息持久化,mysqld重启后不丢失

explain语句支持insert,update,delete,replace语句,并且支持JSON格式
子查询优化提升

5.7

2015年发布,mysql5.7查询性能得以大幅提升,比 MySQL 5.6 提升 1 倍,降低了建立数据库连接的时间

安装不同
mysql_install_db已经不再推荐使用了,建议改成mysqld –initialize 完成实例初始化。如果 datadir 指向的目标目录下已经有数据文件,则会有[ERROR] Aborting
在初始化时如果加上 –initial-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error 日志文件中;新用户登入后需要立刻修改密码,否则无法继续后续的工作
*
安全性
用户表 mysql.user 的 plugin字段不允许为空, 默认值是 mysql_native_password,而不是 mysql_old_password,不再支持旧密码格式
增加密码过期机制,过期后需要修改密码,否则可能会被禁用,或者进入沙箱模式
提供了更为简单SSL安全访问配置,并且默认连接就采用SSL的加密方式。

灵活性
MySQL数据库从5.7.8版本开始,也提供了对JSON的支持
可以混合存储结构化数据和非结构化数据,同时拥有关系型数据库和非关系型数据库的优点
能够提供完整的事务支持
generated column是MySQL 5.7引入的新特性,所谓generated column,就是数据库中这一列由其他列计算而得
在MySQL 5.7 之前,如果用户输入了错误的SQL语句,按下 ctrl+c ,虽然能够”结束”SQL语句的运行,但是,也会退出当前会话,MySQL 5.7对这一违反直觉的地方进行了改进,不再退出会话
MySQL 5.7可以explain一个正在运行的SQL,这对于DBA分析运行时间较长的语句将会非常有用
sys schema是MySQL 5.7.7中引入的一个系统库,包含了一系列视图、函数和存储过程, 该项目专注于MySQL的易用性
例如:如何查看数据库中的冗余索引;如何获取未使用的索引;如何查看使用全表扫描的SQL语句

可用性
在线设置 复制的过滤规则 不再需要重启MySQL,只需要停止SQLthread,修改完成以后,启动SQLthread
在线修改buffer pool的大小
Online DDL MySQL 5.7支持重命名索引和修改varchar的大小,这两项操作在之前的版本中,都需要重建索引或表
在线开启GTID ,在之前的版本中,由于不支持在线开启GTID,用户如果希望将低版本的数据库升级到支持GTID的数据库版本,需要先关闭数据库,再以GTID模式启动,所以导致升级起来特别麻烦

性能
临时表只在当前会话中可见,临时表的生命周期是当前连接(MySQL宕机或重启,则当前连接结束)

只读事务性能改进
避免为只读事务分配事务ID ,不为只读事务分配回滚段,减少锁竞争等多种方式,优化了只读事务的开销,提高了数据库的整体性能

加速连接处理
在MySQL 5.7之前,变量的初始化操作(THD、VIO)都是在连接接收线程里面完成的,现在将这些工作下发给工作线程,以减少连接接收线程的工作量,提高连接的处理速度。这个优化对那些频繁建立短连接的应用,将会非常有用

制性能的改进(支持多线程复制(Multi-Threaded Slaves, 简称MTS)
MySQL的默认配置是库级别的并行复制,为了充分发挥MySQL 5.7的并行复制的功能,我们需要将slave-parallel-type配置成LOGICAL_CLOCK
支持多源复制(Multi-source replication)

严格性改变
默认启用 STRICT_TRANS_TABLES 模式
对 ONLY_FULL_GROUP_BY 模式实现了更复杂的特性支持,并且也被默认启用
其他被默认启用的sql mode还有 NO_ENGINE_SUBSTITUTION

默认参数的改变
默认binlog格式调整为ROW格式
默认binlog错误后的操作调整为ABORT_SERVER
在先前的选项下(binlog_error_action=IGNORE_ERROR),如果一个错误发生,导致无法写入binlog,mysql-server会在错误日志中记录错误并强制关闭binlog功能。这会使mysql-server在不记录binlog的模式下继续运行,导致从库无法继续获取到主库的binlog
默认开启mysql崩溃时的binlog安全
默认调低slave_net_timeout

8.0.11

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

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

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

隐藏索引
在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉
开始支持invisible index,在优化SQL的过程中可以设置索引为不可见,MySQL优化器便不会利用不可见索引。我们可以通过隐藏该索引,来观察对数据库性能的影响,好的话就留下,不好就删除。
用法:alter table t alter index column_idx invisible;

降序索引
MySQL 8.0 为索引提供按降序方式进行排序的支持,在这种索引中的值也会按降序的方式进行排序通用表表达式(Common Table Expressions CTE)在复杂的查询中使用嵌入式表时,使用 CTE 使得查询语句更清晰

字符集
从 MySQL8.0 开始,数据库的缺省编码将改为 utf8mb4,这个编码包含了所有 emoji 字符

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

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

高可用性(High Availability)
InnoDB 集群为您的数据库提供集成的原生 HA 解决方案

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

新增了事务类型的数据字典,所有的元数据信息,都用InnoDB存
储引擎进行存储。

可以使用角色可以方便地对用户权限进行管理

新增了SET PERSIST 命令 MySQL 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。

支持DDL 原子操作
InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作

直方图的引入
MySQL 8.0 版本开始支持期待已久直方图。优化器会利用存储在I_S的column_statistics的数据,判断字段的值的分布,得到更准确的执行计划。
用法:ANALYZE TABLE table_name [UPDATE HISTOGRAM|DROP HISTOGRAM]

.支持会话级别SET_VAR 动态调整部分参数,有利于提升语句性能

select /*+ SET_VAR(sort_buffer_size = 16M) */ name from people order y name; 
insert /*+ SET_VAR(foreign_key_checks=OFF) */ into t2 values(2);  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值