数据库是数据的集合,数据管理系统(DBMS)是操作和管理数据库的应用程序。数据库应用主要有两类:
- OLTP(Online Transaction Processing):联机事务处理
实时性要求高
数据量小
高并发
要求满足ACID - OLAP(Online Analytical Processing ):联机分析处理
实时性要求不高
数据量大
并发量小
InnoDB存储引擎
- 面向OLTP的应用
- 行锁设计、支持外键、并支持类似于Oracle的非锁定读
- 采用聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放,如果没有在表中显示指定主键,innodb会为每一行生成一个6个字节的rowid,并以此为主键
MyISAM存储引擎
- 面向OLAP的应用
- 表锁设计、不支持事务、支持全文索引
- 存储引擎表由MYD和MYI组成;MYD储放数据文件,MYI存放索引文件;可以通过使用myisampack工具来进一步压缩数据文件,因为myisampack工具使用赫夫曼(Huffman)编码静态算来压缩数据,因此使用myisampack工具压缩后的表是只读的
- 缓冲池(cache)只缓存索引文件,不缓存数据文件,数据文件的缓存交由操作系统自身完成
NDB存储引擎
- 是一个集群存储引擎
- 数据全部存放在内存中,从mysql 5.1 版本开始可以将非索引数据放在磁盘上;因此主键查找快,并且可以通过添加NDB数据存储节点,线性的提高数据库性能
- 连接操作(join)是放在mysql数据层完成的,而不是在存储引擎层,所以复杂的连接操作,速度很慢
Memory存储引擎(HEAP存储引擎)
- 将表中的数据存放在内存中,如果数据库重启或者崩溃,数据会消失,适合于存储中间数据的临时表
- 只支持表锁
- 不支持TEXT和BLOG列类型
- 存储变长字段(varchar)时是按照定长字段(char)的方式进行的,会浪费内存
- 如果用于存储中间结果集时存储的数据大于存储表的容量设置,又或者中间结果集中含有TEXT和BLOG列类型字段,则mysql会把其转换为MyISAM存储引擎表存放到磁盘上,而MyISAM不缓存数据文件,因而产生的临时表性能对于查询会有影响
Archive存储引擎
- 只支持INSERT和SELECT操作
- 使用zlib算法将row进行压缩后存储,压缩比列可达1:10
- 适合存储归档数据,如日志
- 使用行锁,提高并发,但本身并不是事务安全的存储引擎
Federated存储引擎
- 本身不存储数据,只是指向一台远程的数据库服务器上面的表
- 只支持mysql数据库表,不支持异构数据库表
Maria存储引擎
- 新开发的引擎,主要用来取代MyISAM
- 支持缓存数据和索引文件、行锁设计、提供了MVCC(多版本并发控制)功能,支持事务和非事务安全的选项