MySQL架构介绍(5.存储引擎)
MySQL内建主流存储引擎主要死InnoDB和MyISAM
1)InnoDB
MySQL默认的事务型存储引擎,当前互联网行业MySQL数据库的主流选择,主要用来处理大量短期事务,大部分正常提交,很少部分回滚。
数据存储在表空间中,由一系列数据文件组成。MySQL4.1版本后,每个表数据和索引存储在单独文件中。
InnoDB采用MVCC机制支持高并发事务处理,并且实现了四个标准隔离级别。默认repeatable read可重复读,通过间隙锁策略防止幻读出现。间隙锁使得InnoDB锁定查询行和索引间隙,以防止幻读行插入。
InnoDB基于聚集索引建立,聚集索引对主键查询性能高。二级索引中必须包含主键列,若是主键列很大,则其他所有的索引都会很大。因此,若表上的索引很多的话,主键索引尽可能设计小一些。
InnoDB性能高效,主要是从磁盘读数据时采用可预测读,在内存中自动创建hash索引以加速读操作的自适应。详见官方手册“InnoDB事务模型和锁”。
通过一些诸如XtraBackup工具InnoDB可以做到热备份,但其他存储引擎都无法热备。
2)MyISAM
MyISAM5.1版本前是默认存储引擎。MyISAM提供了大量特性,包括全文索引、压缩、空间函数等,但不支持事务和行级锁,这就导致一旦挂掉后无法安全恢复。
存储:
MyISAM会存储两个文件:数据文件和索引文件,分别以.myd和.myi为扩展名。表包括静态行和动态行。MySQL会根据表的定义来决定采用何种格式。MyISAM表可以存储记录行数,一般受限于可用磁盘空间,或者操作系统中单个文件的最大尺寸。
特性:
加锁并发,整张表加锁非行锁。读操作对所读表加共享锁,写操作对所有表加排他锁。但读操作时可以并发插入。
修复,可以手工或自动执行检查修复,但修复过程中可能会丢失数据且操作慢。
检查指令:check table 表名
修复指令:repair table 表名
索引特性,可以创建索引,支持全文索引。
3)其他存储引擎
除了上述MySQL内建存储引擎外,MySQL还支持其他存储引擎,如:archive、blackhole、csv、federated和memory等。