本系列为《深入浅出MySQL》的笔记,有兴趣的朋友可以阅读该书籍获得更多更详细的知识,如有错误或者侵权请联系,感谢你的阅读和指正
随笔
- 插件式存储引擎是MySQL数据库最重要的特性之一
- 事务处理:由一个或多个SQL 语句序列结合在一起所形成的一个逻辑处理单元
- MySQL5.0支持的存储引擎包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等
各种存储引擎的特性
特点 |
MyISAM |
InnoDB |
MEMORY |
MERGE |
NDB |
存储限制 |
有 |
64TB |
有 |
没有 |
有 |
事务安全 |
|
支持 |
|
|
|
锁机制 |
表锁 |
行锁 |
表锁 |
表锁 |
行锁 |
B树索引 |
支持 |
支持 |
支持 |
支持 |
支持 |
哈希索引 |
|
|
支持 |
|
支持 |
全文索引 |
支持 |
|
|
|
|
集群索引 |
|
支持 |
|
|
|
数据缓存 |
|
支持 |
支持 |
|
支持 |
索引缓存 |
支持 |
支持 |
支持 |
支持 |
支持 |
数据可压缩 |
支持 |
|
|
|
|
空间使用 |
低 |
高 |
N/A |
低 |
低 |
内存使用 |
低 |
高 |
中等 |
低 |
高 |
批量插入的速度 |
高 |
低 |
高 |
高 |
高 |
支持外键 |
|
支持 |
|
|
|
- 静态表、动态表和压缩表的特点
表名称 |
优点 |
缺点 |
静态表 (默认存储格式) |
存储非常迅速 |
占用的空间通常比动态表多 |
动态表 (包含变长字段) |
占用的空间相对较少 |
频繁地更新和删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk-r命令来改善性能 |
压缩表 |
占据非常小的磁盘空间 |
|
什么是索引?
用于加快查找数据速度的一种内部机制。
索引的好处和坏处:
- 好处:极大加快查找数据的速度
- 坏处:降低增删改的速度
索引的分类:
- 主键索引:primary key
- 唯一索引:unique key
- 全文索引:fulltext
- 外键索引:foreign key(字段名……)references 其他表名(对应其他表中的字段名)
- InnoDB
InnoDB引擎的存储方式有共享表空间存储和多表空间存储,即便在多表空间的存储方式下,共享表空间仍然是必须的,InnoDB把内部数据词典和在线重做日志放在这个文件中 - MEMORY
MEMORY存储引擎使用存在于内存中的内容来创建表,每个MEMORY表只实际对应一个磁盘文件,但是表中数据由于是存放于内存之中所以会出现服务关闭,表中数据丢失的情况
MEMORY类型的存储引擎主要用于那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果。
使用MEMORY作为存储引擎的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑 - MERGE
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身并没有数据,对MERGR类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行的 - TokuDB
高写性能高压缩的TokuDB是一个高性能、支持事物处理的MySQL和MariaDB的存储引擎,具有高扩展性、高压缩率、搞笑的写入性能,支持大多数在线的DDL操作
几种常用存储引擎的适用环境
存储引擎 |
适用环境 |
MyISAM |
应用于以读和插入操作为主,只有很少的更新和删除操作,并且对事物的完整性、并发性要求不是很高 |
InnoDB |
应用于事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,能有效降低由于删除和更新导致的锁定,还可以确保事务的完整提交和回滚 |
MEMORY |
在需要快速定位记录和其他类似数据的环境下,可提供极快的访问,但是对表的大小有限制 |
MERGE |
将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们 |