写在前面

MySQL,Oracle,SqlServer都是在关系型数据库中都占有一席之地,MySQL数据库也被称为业内最广泛使用的开源数据库之一,而插件式存储引擎的是其最重要的特点之一,了解其存储引擎能更方便的使用MySQL数据库的特性。

本节目标

了解MySQL插件式存储引擎

掌握MyISAM和InnoDB存储引擎的区别

插件式存储引擎是什么?

MySQL的存储引擎为插件式存储引擎,即允许MySQL 官方提供,又允许第三方通过MySQL的API接口自行开发存储引擎。MySQL中使用各种不同的技术,将数据放在不同的文件系统中进行存储,例如针对内存数据库(MEMORY引擎)则将数据直接存储在内存中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的功能和 能力,通过选择不同的技术,用户能够获得额外的速度或者功能,从而改善应用的整体功能。例如,如果要研究大量的临时数据,也许就需要使用内存存储引擎,内存存储引擎能够在内存中存储所有的表格数据,帮助用户完成应用。又或者,用户也许需要一个支持事务处理的数据库,以确保事务处理不成功时数据的回退能力,这就需要使用支持事务处理的存储引擎(InnoDB引擎)。这些不同的技术以及配套的相关功能在MySQL中被称做存储引擎(也称做表类型)。MySQL默认配置了许多不同的 存储引擎,可以预先设置或者在MySQL服务器中启用。可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储信息、如何检索这些信息以及需要数据结合什么性能和功能的时候提供最大的灵活性。MySQL5.5之后提供10种存储引擎,MEMORY,CSV,PERFORMANCE_SCHEMA,BLACKHOLE,MyISAM,MRG_MYISAM,ARCHIVE,FEDERATED,InnoDB,Aria。在MySQL的众多存储引擎中InoDB与MyISAM为使用最多的两个存储引擎。所以本文也主要讲述这两个存储引擎之间的区别。

MyISAM和InnoDB存储引擎的区别

在说两者之间的区别之前,首先要弄清楚一个概念,存储引擎是表级别的概念,所以才成为表类型,每创建一张表都可以指定所使用的存储引擎,但是并不建议每张表都交叉使用不同的引擎。

1数据文件

MyISAM存储引擎每张表都创建三个文件

table_name.frm

存储表的结构

table_name.MYD

存储数据

table_name.MYI

存储索引

InnoDB对把数据存储与表空间中,分为两种方式:所有InonoDB表的数据和索引放置于同一个表空间中和每个表单独使用一个表空间存储表的数据和索引。

当所有表位于同一表空间中,其数据文件存于数据目录下以ibddata[#]来命名。这种方式不利于管理和备份恢复。所以一般使用第二种方式,每张表创建单独的表空间,用来实现InnoDB所支持的高级特性,比如单表导入导出,单标备份等功能。数据文件为

table_name.ibd

存储数据和索引

table_name.frm

存储表结构定义

2事务性

MyISAM类型的表强调性能,其执行速度比InnoDB类型更快但不提供事务的支持,也不支持外键,适用于大量select操作的应用场景。InnoDB支持事务,并把事务分为四个隔离级别,READ-UNCOMMITTED:读未提交容易发生脏读;READ-COMMITTED:读提交,该级别不可重复读;REPEATABLE-READ:可重复读,该级别容易发生幻读;SERIALIZABLE:串行化;默认级别为REPEATABLE-READ。适合对事务要求较高的场景中,较适用于处理大量短期事务。

3锁粒度

MyISAM的锁粒度较为粗糙,为表级锁。而InnoDB为行级锁,并使用间隙锁来防止幻读。当然InnoDB的行级锁也并非绝对,当SQL语句在执行过程中在不能确定扫描范围时也会对整张表进行锁定,例如updatestudents set sex=”M” where name like “%aaa%”;

4索引类型

InnoDB为聚集索引,辅助索引,MyISAM为非聚集索引并且支持全文索引(fulltext index)。

5备份策略

InnoDB支持热备、温备、冷备。崩溃后可安全恢复。MyISAM最支持温备与冷备。崩溃后无法安全恢复。

6其他

InnoDB支持自适应的hash索引,使用MVCC来支持高并发。在性能方面,支持预读操作,内存数据缓冲,内存索引缓存,插入操作缓冲区等。InnoDB引擎支持延迟索引更新,和表压缩等特性。

近年来,InnoDB已有取代MyISAM之趋势。MySQL与mariadb的默认存储引擎已使用InnoDB。

mysql replicatedodb_MySQL存储引擎MyISAM与InnoDB的区别相关推荐

  1. mysql and常用引擎_MySQL两大常用存储引擎MyISAM,InnoDB的区别

    本文主要整理了MySQL两大常用的存储引擎MyISAM,InnoDB的六大常见区别,来源于Mysql手册以及互联网的资料 InnoDB与Myisam的六大区别 MyISAM InnoDB 构 成上的区 ...

  2. MySQL存储引擎MyISAM和InnoDB的区别

    需要完整版PDF面试文档可扫描左侧二维码拿! 你都工作3年了,怎么还不知道MyISAM和InnoDB有什么区别?一位粉丝被面试官这样一个问题.当时,这位粉丝直接回复"不知道",这位 ...

  3. mysql 两种存储引擎 MyISAM 和InnoDB

    mysql 两种存储引擎 MyISAM 和InnoDB MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西.决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们 ...

  4. 【myISAM和innoDB】mySql的引擎myisam和innodb的区别/mysiam(mysql插入速度优化)

    目录 Myisam 和Innodb 特点和擅长 Myisam 和Innodb 数据存储区别 Myisam引擎(非聚集索引--叶子节点存储数据地址的指针) Innodb引擎(聚集索引---叶子节点的da ...

  5. MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)

    前言 MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系. 由于各存储引擎功能特性差异较大 ...

  6. MySQL的两个存储引擎--MyISAM和InnoDB

    MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎.流行使用的有两个:MyISAM和InnoDB 1. MyISAM存储引擎 MyISAM存储引擎是MySQL官方提供的存储引擎.其特点是 ...

  7. 理论+实操: MySQL索引与事务、视图、存储过程(软件开发用的多)、存储引擎MyISAM和InnoDB

    文章目录 一:索引的概念 二:索引的作用 三:索引的分类 3.1 普通索引 3.2 唯一性索引 3.3 主键 3.4 全文索引 3.5 单列索引与多列索引 四:创建索引的原则依据 五:创建索引的方法 ...

  8. innodb和my查询速度_mysql存储引擎MyISAM和InnoDB

    MyISAM和InnoDB MyISAM是mysql5.7版本以前使用的存储引擎. 优点用于查询频率较高的场合中 ,例如网站商城的数据提拿等. 缺点是不支持事务,不适宜银行,证券等. 基于表锁定 读取 ...

  9. Mysql存储引擎MyIsAM和InnoDB区别

    Mysql 数据库中,最常用的两种引擎是innordb 和myisam.InnoDB 是Mysql 的默认存储引擎. 两者的区别: 1.事务处理上方面 MyISAM:强调的是性能,查询的速度比Inno ...

  10. MySQL 存储引擎 | MyISAM 与 InnoDB

    文章目录 概念 innodb引擎的4大特性 索引结构 InnoDB MyISAM 区别 表级锁和行级锁 概念 MyISAM 是 MySQL 的默认数据库引擎(5.5版之前),但因为不支持事务处理而被 ...

最新文章

  1. jQuery之动画效果
  2. 看个电子书都会被黑客攻击,这是上面情况?
  3. android之隐式intent调用
  4. get与post的区别与联系
  5. Android中的AutoCompleteTextView组件
  6. 4大要点搞定企业私有云建设
  7. [翻译]Log Everything All the Time
  8. 几个有用的小程序(转载)
  9. linux常用命令练习:wc、cut、|、tee、tail
  10. Hybrid 接口应用
  11. 代码-JS之淡入淡出背景自动切换
  12. E-prime 行为实验设计
  13. 教你itunes电脑版怎么下载
  14. oracle 基础知识(十四)----索引扫描
  15. (python版)《剑指Offer》JZ58:对称的二叉树
  16. mysql 加权_mysql/stats:加权平均值以突出平均值的差异
  17. 1.4 安装Kali Linux
  18. are in unnamed module of loader ‘app‘)“ }
  19. Java怎么除以2_哪个更好的选项用于将整数除以2?
  20. 日历---C++封装一个Date类,Calendar类,实现简单的日历+日期计算器程序

热门文章

  1. zabbix api 接口的自动化
  2. ef core code first from exist db
  3. Java本地缓存解决方案其一(使用Google的CacheBuilder)
  4. HtmlUnitDriver 网页内容动态抓取
  5. python 多线程,进程的理解
  6. Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的
  7. sshj ,ssh , springmvc pom.xml
  8. requests 上传本地文件到服务器
  9. 【论文阅读】Fully Convolutional Networks for Semantic Segmentation
  10. 小样本学习与Triplet Loss,数据增强和课程学习