MySQL存储引擎
1. 什么是存储引擎?
存储引擎就是如何存储数据、如何为存储的数据建立索引、如何更新、查询数据等技术的实现方法。因为在关系数据库中数据是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。在Oracle和SQLServer等数据库中只有一种存储引擎,所有的数据存储管理机制都是一样的;而MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据需要编写自己的存储引擎。
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。
2. 存储引擎的作用?
存储引擎的作用规定了数据存储时的存储结构。现实生活中,由于不同的业务产生了不同的数据,这些数据有的可能偏重于被频繁的 查询,有的要求增删速度快,有的则对事务、索引、外键有特殊的规定。这样一来就堆存储数据的表要求使用不同的数据组织结构,也就是存储引擎。
3. 常见存储引擎
现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。
- InnoDB:事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。
- MyISAM:是基于 ISAM 的存储引擎,并对其进行扩展,是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。
- MEMORY:存储引擎将表中的数据存储到内存中,为查询和引用其他数据提供快速访问。
对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作。 |
缓存 | 只缓存索引 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
默认安装 | Y | Y |
如果用InnoDB是必须有主键的,主键建议用自增的id而不用uuid,用uuid会使得索引变慢。
InnoDB是聚簇索引(叶子节点存数据),MyISAM是非聚簇索引(叶子节点存指针)
InnoDB 支持事务、行级锁, 而MyISAM都不支持