引擎
MySQL常见的引擎有:InnoDB、MyISAM、Memory、Merge-MyISAM。
InnoDB
支持事务、外键、聚簇索引、行级锁。
Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,
MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。
不支持FULLTEXT类型的索引,没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。
行级锁的粒度小,写操作不会锁定全表,并发较高时,使用Innodb引擎会提升效率。
但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会
- 经常更新的表,适合处理多重并发的更新请求。
- 支持事务。
- 可以从灾难中恢复(通过bin-log日志等)。
- 外键约束,只有他支持外键。
- 支持自动增加列属性auto_increment。
MyISAM
不支持事务、外键、非聚簇索引、查询速度快、表级锁、支持全文索引、可以无主键。
表级锁粒度较粗,INSERT、UPDATE时需要锁定整个表,效率便会低一些。
MyIsam 存储引擎独立于操作系统,在创建表的时候,会创建三个文件,一个是.frm文件用于存储表的定义,一个是.MYD文件用于存储表的数据,另一个是.MYI文件,存储的是索引。操作系统对大文件的操作是比较慢的,这样将表分为三个文件,那么.MYD这个文件单独来存放数据自然可以优化数据库的查询等操作。有索引管理和字段管理。MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。
Memory
存储于内存中,每个memory表对应一个.frm
的磁盘文件。默认使用Hash
索引,也可选择Btree
索引。
Merge-MyISAM
是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。