切记:存储引擎是基于表的,而不是数据库。

存储引擎概念:

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

显示可用的数据库引擎的全部名单以及在当前的数据库服务器中是否支持这些引擎

mysql> show engines\G;

*************************** 1. row***************************

Engine: FEDERATED

Support: NO

Comment: Federated MySQL storage engine

Transactions: NULL

XA: NULL

Savepoints: NULL

*************************** 2. row***************************

Engine: MRG_MYISAM

Support: YES

Comment: Collection of identical MyISAM tables

Transactions: NO

XA: NO

Savepoints: NO

*************************** 3. row***************************

Engine: MyISAM

Support: YES

Comment: MyISAM storage engine

Transactions: NO

XA: NO

Savepoints: NO

*************************** 4. row***************************

Engine: BLACKHOLE

Support: YES

Comment: /dev/null storage engine (anything you write to it disappears)

Transactions: NO

XA: NO

Savepoints: NO

*************************** 5. row***************************

Engine: CSV

Support: YES

Comment: CSV storage engine

Transactions: NO

XA: NO

Savepoints: NO

*************************** 6. row***************************

Engine: MEMORY

Support: YES

Comment: Hash based, stored in memory, useful for temporary tables

Transactions: NO

XA: NO

Savepoints: NO

*************************** 7. row***************************

Engine: ARCHIVE

Support: YES

Comment: Archive storage engine

Transactions: NO

XA: NO

Savepoints: NO

********** *********************** **********8. row ***************************

Engine: InnoDB

Support: DEFAULT

Comment: Supports transactions, row-level locking, and foreign keys

Transactions: YES

XA: YES

Savepoints: YES

*************************** 9. row***************************

Engine: PERFORMANCE_SCHEMA

Support: YES

Comment: Performance Schema

Transactions: NO

XA: NO

Savepoints: NO

9 rows in set (0.25 sec)

类别详解

MyISAM: 拥有较高的插入,查询速度,但不支持事务

InnoDB :5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定

BDB:源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性

Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失

Merge :将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用

Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差

Federated:将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用

Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用

CSV:逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继

另外,Mysql的存储引擎接口定义良好。有兴趣的开发者通过阅读文档编写自己的存储引擎。(百度百科的)

InnoDB 与 MyISAM 的区别:

InnoDB

InnoDB 存储引擎,主要面向 OLTP(OnlineTransaction Processing,在线事务处理)

方面的应用,是第一个完整支持 ACID 事务的存储引擎(BDB 第一个支持事务的存储引擎,

已经停止开发)。

特点:

行锁设计、支持外键;

支持类似于 Oracle 风格的一致性非锁定读(即:默认情况下读取操作不会产生锁);

InnoDB 将数据放在一个逻辑的表空间中,由InnoDB 自身进行管理。从 MySQL4.1 版本开

始,可以将每个 InnoDB 存储引擎的表单独存放到一个独立的 ibd 文件中;

InnoDB 通过使用 MVCC(多版本并发控制:读不会阻塞写,写也不会阻塞读)来获得高并发

性,并且实现了 SQL 标准的 4 种隔离级别(默认为 REPEATABLE 级别);

InnoDB 还提供了插入缓冲(insertbuffer)、二次写(double write)、自适应哈希索

引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能;

InnoDB 采用了聚集(clustered)的方式来存储表中的数据,每张标的存储都按主键的顺

序存放(如果没有显式的在建表时指定主键,InnoDB会为每一行生成一个6字节的ROWID,

并以此作为主键);

InnoDB 表会有三个隐藏字段:除了上面提到了 6 字节的 DB_ROW_ID外,还有 6 字节的

DB_TX_ID(事务 ID)和 7 字节的DB_ROLL_PTR(指向对应回滚段的地址)。这个可以通过

innodb monitor 看到;

MyISAM

MyISAM 存储引擎是 MySQL 官方提供的存储引擎,主要面向

OLAP(Online Analytical Processing,在线分析处理)方面的应用。

特点:

不支持事务,支持表所和全文索引。操作速度快;

MyISAM 存储引擎表由 MYD 和 MYI 组成,MYD 用来存放数据文件,MYI 用来存放索引文件。

MySQL 数据库只缓存其索引文件,数据文件的缓存交给操作系统本身来完成;

MySQL5.0 版本开始,MyISAM 默认支持 256T 的单表数据;

INNODB表引擎

1.默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀

2.数据存储在共享表空间(多个表在一个文件中存储),可以通过配置分开

3.对主键查询的性能高于其他类型的存储引擎

4.内部做了许多优化,从磁盘读取数据时自动在内存构建hash索引

5.插入数据时自动构建插入缓冲区

6.通过机制和工具支持真正的热备份

7.支持崩溃后的安全恢复

8.支持行级锁

9.支持外键

MyISAM表引擎

1.5.1版本前,MyISAM是默认的存储引擎

2.拥有全文索引,压缩和空间函数

3.不支持事务和行级锁,不支崩溃后的安全恢复

4.表存储在两个文件,MYD和MYI

5.设计简单,某些场景下设计很好

作者:Mecury
链接:https://www.zhihu.com/question/20596402/answer/529312016
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。

MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。正是由于MyISAM引擎的缘故,即使MySQL支持事务已经很长时间了,在很多人的概念中MySQL还是非事务型数据库。尽管这样,它并不是一无是处的。对于只读的数据,或者表比较小,可以忍受修复操作,则依然可以使用MyISAM(但请不要默认使用MyISAM,而是应该默认使用InnoDB)

MySQL存储引擎--MyISAM与InnoDB区别

1、 存储结构

MyISAM:每个MyISAM在磁盘上存储成三个文件。分别为:表定义文件、数据文件、索引文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。

InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

2、 存储空间

MyISAM: MyISAM支持支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。当表在创建之后并导入数据之后,不会再进行修改操作,可以使用压缩表,极大的减少磁盘的空间占用。

InnoDB: 需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

3、 可移植性、备份及恢复

MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。

InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。

4、 事务支持

MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。

InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

5、 AUTO_INCREMENT MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。

InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

6、 表锁差异

MyISAM: 只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。

InnoDB: 支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

7、 全文索引

MySql全文索引

MyISAM:支持 FULLTEXT类型的全文索引

InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。

8、表主键

MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。

InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

9、表的具体行数

MyISAM: 保存有表的总行数,如果select count() from table;会直接取出出该值。

InnoDB: 没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。

10、CRUD操作

MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。

InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

11、 外键

MyISAM:不支持

InnoDB:支持


DELIMITER

在mysql中每行命令都是用";"结尾,回车后自动执行,在存储过程中“;”往往不代表指令结束,马上运行,而delimiter原本就是“;”的意思,因此用这个命令转换一下“;” 为 “$$”,这样只有接收到“$$”才认为指令结束可以执行

mysql存储引擎中INNODB和MyISAM的区别相关推荐

  1. Mysql存储引擎中InnoDB与Myisam的区别

    为什么80%的码农都做不了架构师?>>>    1. 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好. 2. select ,u ...

  2. Mysql 存储引擎中InnoDB与Myisam的主要区别

    一直以为我spring事物没有配置好,结果发现是mysql的表本身设置成了Myisam 引擎.改成innodb就支持事物了. 1, 事务处理 innodb 支持事务功能,myisam 不支持. Myi ...

  3. 「MySQL 数据库 存储引擎」InnoDB和MyIsAm的区别

    我们应该深刻意识到Mysql数据库的核心为存储引擎 MySql数据库的插件型体系结构,可以使用不同的存储引擎-- 而每个存储引擎都有各自的特点,开发人员可以根据不同的业务和应用建立不同的存储引擎表. ...

  4. MySQL 存储引擎(InnoDB、MyISAM、MEMORY)

    一.MySQL的体系结构 1.连接层:最上层是一些客户端和链接服务,主要完成一些类似于连接处理.授权认证.及相关的安全方案.服务器也会为安全接入的每个客户端验证它所具有的操作权限. 2.服务层:第二成 ...

  5. 浅谈MySQL存储引擎选择 InnoDB还是MyISAM

    如果是一些小型的应用或项目,那么MyISAM 也许会更适合.当然,在大型的环境下使用MyISAM 也会有很大成功的时候,但却不总是这样的.如果你正在计划使用一个超大数据量的项目,那么你应该直接使用In ...

  6. MySQL存储引擎中MyISAM和InnoDB区别

    转载自  MySQL存储引擎中MyISAM和InnoDB区别 MyISAM 和InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应 ...

  7. MySQL存储引擎(InnoDB引擎)

    本篇章主要介绍什么是 MySQL 存储引擎?常用的 MySQL 存储引擎有哪些?以及详细介绍一下目前应用最广泛的 InnoDB 存储引擎,包括其:逻辑存储结构.架构.事务原理.MVCC等. 一.初识  ...

  8. MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引 ...

  9. mysql 内存引擎_MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引 ...

最新文章

  1. Mysql binlog日志及binlog恢复数据库操作
  2. 处理测试环境硬盘爆满
  3. 微信生态下的营销洞察
  4. DataGuard和GoldenGate灾备方案对比
  5. vivo S5官方广告正式揭晓:11月14日发布!
  6. python面相对象编程超市系统_python面向对象编程: 面向对象版学员管理系统
  7. linux挂载点 知乎,使用 Linux stat 命令创建灵活的文件列表 | Linux 中国
  8. UVa1368 - DNA Consensus String
  9. Kubernetes 架构与设计
  10. windowlinux查看MD5
  11. PLC系统的选型以及应用方法
  12. OriginPro 中文
  13. 计算机硬盘数据清零,如何完全清除硬盘数据,使其永不恢复
  14. 游戏脚本在移动游戏设计中的作用_游戏可以在教育中起到哪些正面的作用?
  15. harbor登录报错doesn‘t contain any IP SANs问题
  16. 【大顶堆】最小的k个数
  17. 科罗拉多大学波尔得分校计算机科学,CU Boulder的Computer Science「科罗拉多大学波德分校计算机科学系」...
  18. 源码圈 300 胖友的书单整理
  19. 创业项目-网赚项目 - 靠一份文档做到月入数万
  20. 基于形态学的图像后期抗锯齿算法--MLAA优化研究

热门文章

  1. android 支付宝和微信支付封装,Android支付宝和微信支付集成
  2. gitkraen_超详细!Github团队协作教程(Gitkraken版)
  3. 七十六、 数据结构二叉树及其代码实现
  4. 从2019年-2021年的各大顶会论文,看动态神经网络的发展
  5. MIT开源高性能自动微分框架Enzyme:速度提升4.5倍
  6. 探究Softmax的替代品:exp(x)的偶次泰勒展开式总是正的
  7. 10万元奖金“智源工业检测赛”激战正酣!高分Baseline合辑带你入门智能制造
  8. 半监督学习之数据加载
  9. micropython开发idethonny_ESP32 Micropython开发利器Thonny IDE介绍
  10. matlab元件阻感负载,单相桥式全控整流电路阻感负载课程设计matlab