MySql存储引擎

  • 导读
  • InnoDB存储引擎
    • 一、存储结构
    • 二、存储空间消耗
    • 三、对事务支持情况
    • 四、对锁支持
    • 五、表行数
  • MyISAM存储引擎
    • 一、存储结构
    • 二、存储空间消耗
    • 三、对事务支持情况
    • 四、对锁支持
    • 五、表行数
  • 为什么MyISAM会比Innodb 的查询速度快
    • 应用场景选择

导读

MySQL支持的存储引擎很多,其中包括MyISAM、InnoDB、MERGE、EXAMPLE、BDB、ARCHIVE、MEMORY、NDB Cluster等,其中InnoDB和BDB支持事务安全。同时MySql还支持一些第三方的存储引擎,例如TokuDB(高写性能高压缩存储引擎)、Infobright(列式存储引擎)。本文主要讲InnoDB和MyISAM这两个普遍使用的存储引擎之间差异,选择场景。

InnoDB存储引擎

InnoDB是MySQL最常用的数据库引擎,是MySQL AB发布binary的标准之一。InnoDB存储引擎由Innobase Oy公司所开发,在2006年五月时被甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。

一、存储结构

所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),.frm文件同样存储为表结构文件,.ibd文件存储的是数据和索引文件,InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
InnoDB支持聚簇索引和非聚簇索引

二、存储空间消耗

InnoDB会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

三、对事务支持情况

拥有外键和事务支持,还具有事务提交(commit)、回滚(rollback)和崩溃修复能力(crach recovery capabilities)等这些事务安全(transaction-safe ACID compliant)型表。
InnoDB中必须包含主键索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

四、对锁支持

InnoDB存储引擎支持表锁,行锁,行锁可以大幅度提高用户并发操作。对于 InnoDB 引擎来说,读锁和写锁可以加在表上,也可以加在行上。
对于并发读和并发写的问题,可以通过实现一个由两种类型的锁组成的锁系统来解决。这两种类型的锁通常被称为 共享锁(Shared Lock,S Lock) 和 排他锁(Exclusive Lock,X Lock),也叫 读锁(readlock) 和 写锁(write lock):

共享锁 / 读锁:允许事务读(select)数据
排他锁 / 写锁:允许事务删除(delete)或更新(update)数据

InnoDB 存储引擎的行级锁是基于索引的,也就是说当索引失效或者说根本没有用索引的时候,行锁就会升级成表锁。

五、表行数

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

MyISAM存储引擎

MyISAM是MySQL(5.5版之前)的默认数据库引擎,由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)改良。虽然查询性能优良,但有个缺点:不支持事务(transaction)。所以最近几年逐渐引入了InnoDB(另一种数据库引擎),后来就逐渐取代MyISAM。

一、存储结构

每个MyISAM在磁盘上存储成三个文件,它们以表的名字开头来命名。.frm文件存储表定义。.MYD(MYD)存储数据文件。.MYI(MYIndex)存储索引文件。
MyISAM只支持非聚簇索引

二、存储空间消耗

MyISAM存储空间是可被压缩,存储空间占用较小。MyISAM支持三种存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。

三、对事务支持情况

MyISAM强调的是性能,每次查询具有原子性,其执行速度比Innodb类型更快,但是不提供事务支持。
可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。

四、对锁支持

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

五、表行数

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

为什么MyISAM会比Innodb 的查询速度快

INNODB在做查询的时候,要维护的东西比MYISAM引擎多
1)INNODB要缓存数据块,MYISAM只缓存索引块, 这中间还有换进换出的减少;
2)innodb寻址要映射到块,再到行,MYISAM 记录的直接是文件的OFFSET,定位比INNODB要快
3)INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护

应用场景选择

MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。
InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。

MySql------存储引擎(InnoDB,ISAM)相关推荐

  1. mysql dba系统学习(21)mysql存储引擎InnoDB

    mysql存储引擎InnoDB 1,主体系结构: 默认7个后台线程,4个io thread(insert buffer.log.read.write),1个master thread(优先级最高),1 ...

  2. MySQL存储引擎InnoDB,MyISAM

    MySQL存储引擎InnoDB,MyISAM 1.区别: (1)InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQ ...

  3. Mysql存储引擎Innodb的读写锁、行级锁

    读写锁 Mysql存储引擎Innodb在处理并发读或者写的时候,通过两种类型的锁来解决并发问题,这两种锁通常称为共享锁和排他锁,也叫读锁和写锁. 读锁是共享的,即多个客户端可以同时读取同一资源. 写锁 ...

  4. 常用Mysql存储引擎--InnoDB和MyISAM简单总结

    常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52|  分类: CCST|举报|字号 订阅 MySQL服务器采用了模块化风格,各部分之间保持相对独立, ...

  5. mysql存储引擎InnoDB与MyISAM的区别

    mysql存储引擎InnoDB与MyISAM的区别 众所周知,mysql之前的存储引擎是MyISAM,在5.6版本之后默认的存储引擎是InnoDB,那么两个存储引擎有什么区别? 一.MyISAM 存储 ...

  6. MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别

    文章目录 MySQL存储引擎InnoDB.MyISAM和MEMORY介绍详解和区别 InnoDB存储引擎 特点 操作示例 创建InnoDB表 修改表引擎为InnoDB MyISAM存储引擎 特点 操作 ...

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

    文章目录 前言 一.MySQL 引擎 二.MyISAM和InnoDB特点 三.InnoDB和MyISAM的区别 总结 前言 面试经常会问到MySQL存储引擎的相关内容.常见的MySQL存储引擎有MyI ...

  8. 你居然还不知道Mysql存储引擎InnoDB分为内存架构、磁盘架构?

    作者:陌北有棵树,Java人,架构师社区合伙人! 关于MySQL对于后端程序员的重要性不言而喻,而InnoDB也已经是MySQL默认的存储引擎.作为我们每天打交道的存储引擎,我们对它可能需要对它有更多 ...

  9. MySQL存储引擎InnoDB架构

    目录 查看MySQL使用的存储引擎 磁盘文件 系统表空间 用户表空间 InnoDB逻辑存储结构 RedoLog文件 内存结构 缓冲池Buffer Pool RedoLogBuffer ChangeBu ...

  10. mysql引擎innodb与ndb比较_mysql存储引擎InnoDB 1.1、NDB 7.5对比

    mysql存储引擎InnoDB 1.1.NDB 7.5对比 官网针对NDB和InnoDB进行了多方位的对比: TheNDBstorage engine is implemented using a d ...

最新文章

  1. 【机器学习算法专题(蓄力计划)】十、机器学习中必备的高等数学和线性代数基础
  2. 做一个完整的Java Web项目需要掌握的技能
  3. npm ERR! cb() never called!
  4. Ext JS 3.2.0发布(转)
  5. 使用requests库实现多线程下载
  6. 社保基金入市规模或达3000亿元
  7. 微服务设计 10 大反模式和陷阱!
  8. 金蝶服务器出纳系统无法启动,金蝶KIS专业版启用出纳系统时提示银行账号或银行名称不能为空...
  9. 平面设计师学习指南,平面设计都要学什么
  10. python画pr曲线_根据Precision和recall结果画PR曲线图
  11. Win7 开启自带WIFI进行手机抓包
  12. mp3中不可缺少的音乐
  13. 基于北斗观测值的智能手机GNSS定位研究
  14. html如何在页面打开时让鼠标光标停留在某个表单文本框,网页制作实用技巧
  15. halcon中放大图片
  16. MCGS pro 下载程序时,下位机磁盘空间不足解决办法
  17. rsa public key not find
  18. Geography V.S. Geometry
  19. 磨金石教育摄影技能干货分享:学会这些视频构图法手机也能拍大片
  20. animals中文谐音_animals中文谐音_张杰pretty white lies中文音译歌词

热门文章

  1. select查询之联合查询
  2. 亲测快捷高效的编写测试用例方法
  3. 【Python 实战基础】什么是PyQt6? 简单介绍一下PyQt6
  4. 开题报告里的基本内容写什么,预期效果又怎么写?
  5. Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 21 declared in lib
  6. 学会计为什么要学计算机基础,会计实操为什么要学习手工做账?
  7. 5万字 TypeScript入门系列(第四期)(建议收藏)
  8. if中逻辑运算符表达式运行顺序
  9. switch语句的执行顺序
  10. sap badi s4 MIGO屏幕实施测试