MySQL 引擎
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 引擎相关的知识,希望对你有一定的参考价值。
一、存储引擎简介
(1) 存储引擎说白了就是数据存储的格式,不同的存储引擎功能不同,占用的空间大小不同,读取性能也不同
(2) 数据库存储引擎是数据库底层软件组件,不同的存储引擎提供不同的存储机制
(3) 在 mysql 中,不需要在整个服务器中使用同一种存储引擎,可以对每一个表使用不同的存储引擎
(4) MySQL 支持多种存储引擎,如 InnoDB 、MyISAM 、Memory 、Merge 、Archive 、CSV 、Federated 等等
MyISAM 存储引擎特点:
(1) MySQL 5.5 之前使用 MyISAM 引擎,MySQL 5.5 之后使用 InnoDB 引擎
(2) MyISAM 引擎读取速度较快,占用资源相对较少,不支持事务,不支持外键约束,但支持全文索引
(3) 读写互相阻塞,也就是说读数据的时候你就不能写数据,写数据的时候你就不能读数据
(4) MyISAM 引擎只能缓存索引,而不能缓存数据
MyISAM 适用场景:
(1) 不需要事务支持的业务,例如转账就不行
(2) 适用于读数据比较多的业务,不适用于读写频繁的业务
(3) 并发相对较低、数据修改相对较少的业务
(4) 硬件资源比较差的机器可以考虑使用 MyISAM 引擎
InnoDB 存储引擎特点:
(1) 事务型数据库的首选引擎,支持事务安全表,支持行锁定和外键,MySQL 5.5.5 版本之后,InnoDB 作为默认存储引擎
(2) 具有提交、回滚和崩溃恢复能力的事务安全存储引擎,能处理巨大数据量,性能及效率高,完全支持外键完整性约束
(3) 具有非常高效的缓存特性,能缓存索引也能缓存数据,对硬件要求比较高
(4) 使用 InnoDB 时,将在 MySQL 数据目录下创建一个名为 ibdata1 的 10MB 大小的自动扩展数据文件,以及两个名为 ib_logfile0 和 ib_logfile1 的 5MB 大小的日志文件
InnoDB 适用场景:
(1) 需要事务支持的业务、高并发的业务
(2) 数据更新较为频繁的场景,比如 BBS、SNS、微博等
(3) 数据一致性要求较高的业务,比如充值转账、银行卡转账
Memory 存储引擎特点:
(1) Memory 存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问
(2) Memory 存储引擎执行 HASH 和 BTREE 索引,不支持 BLOB 和 TEXT 列,支持 AUTO_INCREMENT 列和对可包含 NULL 值得列的索引
(3) 当不再需要 Memory 表的内容时,要释放被 Memory 表使用的内存,应该执行 DELETE FROM 或 TRUNCATE TABLE ,或者删除整个表
二、存储引擎的选择
(1) 如果要提供提交、回滚和奔溃恢复能力的事务安全能力,并要求实现并发控制,InnoDB 是个很好的选择
(2) 如果数据表主要用来插入和查询记录,则 MyISAM 引擎能提供较高的处理效率
(3) 如果只是临时存放数据,数据量不大,并且不需要较高的安全性,可以选择将数据保存在内存中的 Memory 引擎,MySQL 使用该引擎作为临时表,存放查询的中间结果
(4) 如果只有 INSERT 和 SELECT 操作,可以选择 Archive 引擎,支持高并发的插入操作,如记录日志信息可以使用 Archive 引擎
功能 | MyISAM | Memory | InnoDB | Archive |
存储限制 | 256TB | RAM | 64TB | None |
支持事务 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持数索引 | Yes | Yes | Yes | No |
支持哈希缓存 | No | Yes | No | No |
支持数据缓存 | No | N/A | Yes | No |
支持外键 | No | No | Yes | No |
以上是关于MySQL 引擎的主要内容,如果未能解决你的问题,请参考以下文章