MySQL数据库引擎
2018-04-28 本文已影响0人
米_8d62
MySQL数据库引擎有哪些
mysql的存储引擎包括:MyISAM 、 InnoDB 、 BDB 、 MEMORY 、 MERGE 、 EXAMPLE 、 NDB Cluster 、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
几种引擎比较
特点 | Myisam | BDB | InnoDB |
---|---|---|---|
存储限制 | 没有 | 没有 | 64TB |
事务安全 | 支持 | 支持 | |
锁机制 | 表锁 | 页锁 | 行锁 |
B 树索引 | 支持 | 支持 | 支持 |
哈希索引 | 支持 | ||
全文索引 | 支持 | ||
集群索引 | 支持 | ||
数据缓存 | 支持 | ||
索引缓存 | 支持 | 支持 | |
数据可压缩 | 支持 | ||
空间使用 | 低 | 低 | 高 |
内存使用 | 低 | 低 | 高 |
批量插入的速度 | 高 | 高 | 低 |
支持外键 | 支持 |
MyISAM引擎
默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、 .MYD (MYData,存储数据)、.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。
MyISAM崩溃后无法安全恢复。
- MyISAM特性
- 加锁与并发
MyISAM是对整个表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁,但是在表有读取查询的同时,可以进行插入操作; - 恢复
CHECK TABLE mytable检查表;REPAIR TABLE mytable修复表; - 索引特性
对于MyISAM表,即使是BLOB和TEXT等长字段,也可以基于前500个字符创建索引;支持全文索引; - 延迟更新索引键
创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次执行修改完成后不会立即将修改的索引数据写入到磁盘中,而是会写入到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块存入到磁盘中。但是在数据库或者主机崩溃是会造成索引损坏,需要执行修复操作;
INNODB引擎
用于事务处理应用程序,具有众多特性,包括 ACID 事务支持。
InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比 Myisam的存储引擎,InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
- InnoDB特性
- InnoDB 的数据存储在表空间tablespace中;
- InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别,默认级别是可重复读,并且通过间隙锁策略防止幻读;
- InnoDB表是基于聚簇索引建立的;
总结
选择合适的引擎,除非用到InnoDB不具备的特性,并且没有其他方法代替,否则都应该优先使用InnoDB引擎;