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. freemarker内建函数介绍
  2. TP 720N V3 8M flash 无TTL 刷回原厂教程
  3. Linux学习笔记---移植官方linux步骤(二)
  4. plsql查询数据显示为乱码解决方案
  5. 《Linux就该这么学》修正已知全部勘误,免费下载啦!
  6. 37.MySQL 优化总结
  7. VC Studio集成开发环境下编译Apache--jin点滴实验手记
  8. python在类中创建线程
  9. 【UWB定位】 - DWM1000模块调试简单心得 - 2
  10. YourTTS论文阅读
  11. 英语太差怎么办,快来写一个“百词斩”软件给自己背单词
  12. O2O商城网站建设方案
  13. system.IO.FileNotFoundException: 未能加载文件或程序集
  14. python对excel某一列求和-如何对某一列自动分组,统计求和
  15. 简单聊聊,我是如何零成本,推广海外游戏~
  16. 小心肝队-冲刺日志(第七天)
  17. 盘点经典免费录屏软件,短视频创作必备
  18. Google log 日志文件
  19. 如何查看当前Word是即点即用版本还是安装版本
  20. 程序员成就技术大拿之路

热门文章

  1. java 队列已满_JAVA中常见的阻塞队列详解
  2. mysql高级 tigger触发器 --[1]
  3. android crt证书,android https 抓包,root安装证书
  4. 《途客圈创业记:不疯魔,不成活》一一1.3 iWeekend创业周末
  5. MAX40026 280ps高速比较器开发资料原理图源代码
  6. POj 3164 Command Network最小树形图 模板题 朱刘算法
  7. hdu 1170 Balloon Comes!(水题)
  8. mysql嵌套select_select 嵌套查询
  9. 现在不止是开淘宝店赚钱,淘宝周边产业也赚钱
  10. 阿里云申请域名过程记录