Mysql5.5 特性,相对于Mysql5.1
性能提升
默认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 分组排队 限流
Mysql5.6 特性,相比5.5
默认参数的改变
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格式
子查询优化提升。
Mysql5.7 特性,相比5.5 5.6
安全性
用户表 mysql.user 的 plugin字段不允许为空, 默认值是 mysql_native_password,而不是 mysql_old_password,不再支持旧密码格式;
增加密码过期机制,过期后需要修改密码,否则可能会被禁用,或者进入沙箱模式;
增加密码过期机制,过期后需要修改密码,否则可能会被禁用,或者进入沙箱模式;
提供了更为简单SSL安全访