MySql------存储引擎(InnoDB,ISAM)
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)相关推荐
- mysql dba系统学习(21)mysql存储引擎InnoDB
mysql存储引擎InnoDB 1,主体系结构: 默认7个后台线程,4个io thread(insert buffer.log.read.write),1个master thread(优先级最高),1 ...
- MySQL存储引擎InnoDB,MyISAM
MySQL存储引擎InnoDB,MyISAM 1.区别: (1)InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQ ...
- Mysql存储引擎Innodb的读写锁、行级锁
读写锁 Mysql存储引擎Innodb在处理并发读或者写的时候,通过两种类型的锁来解决并发问题,这两种锁通常称为共享锁和排他锁,也叫读锁和写锁. 读锁是共享的,即多个客户端可以同时读取同一资源. 写锁 ...
- 常用Mysql存储引擎--InnoDB和MyISAM简单总结
常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52| 分类: CCST|举报|字号 订阅 MySQL服务器采用了模块化风格,各部分之间保持相对独立, ...
- mysql存储引擎InnoDB与MyISAM的区别
mysql存储引擎InnoDB与MyISAM的区别 众所周知,mysql之前的存储引擎是MyISAM,在5.6版本之后默认的存储引擎是InnoDB,那么两个存储引擎有什么区别? 一.MyISAM 存储 ...
- MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别
文章目录 MySQL存储引擎InnoDB.MyISAM和MEMORY介绍详解和区别 InnoDB存储引擎 特点 操作示例 创建InnoDB表 修改表引擎为InnoDB MyISAM存储引擎 特点 操作 ...
- MySQL存储引擎InnoDB和MyISAM的区别
文章目录 前言 一.MySQL 引擎 二.MyISAM和InnoDB特点 三.InnoDB和MyISAM的区别 总结 前言 面试经常会问到MySQL存储引擎的相关内容.常见的MySQL存储引擎有MyI ...
- 你居然还不知道Mysql存储引擎InnoDB分为内存架构、磁盘架构?
作者:陌北有棵树,Java人,架构师社区合伙人! 关于MySQL对于后端程序员的重要性不言而喻,而InnoDB也已经是MySQL默认的存储引擎.作为我们每天打交道的存储引擎,我们对它可能需要对它有更多 ...
- MySQL存储引擎InnoDB架构
目录 查看MySQL使用的存储引擎 磁盘文件 系统表空间 用户表空间 InnoDB逻辑存储结构 RedoLog文件 内存结构 缓冲池Buffer Pool RedoLogBuffer ChangeBu ...
- 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 ...
最新文章
- freemarker内建函数介绍
- TP 720N V3 8M flash 无TTL 刷回原厂教程
- Linux学习笔记---移植官方linux步骤(二)
- plsql查询数据显示为乱码解决方案
- 《Linux就该这么学》修正已知全部勘误,免费下载啦!
- 37.MySQL 优化总结
- VC Studio集成开发环境下编译Apache--jin点滴实验手记
- python在类中创建线程
- 【UWB定位】 - DWM1000模块调试简单心得 - 2
- YourTTS论文阅读
- 英语太差怎么办,快来写一个“百词斩”软件给自己背单词
- O2O商城网站建设方案
- system.IO.FileNotFoundException: 未能加载文件或程序集
- python对excel某一列求和-如何对某一列自动分组,统计求和
- 简单聊聊,我是如何零成本,推广海外游戏~
- 小心肝队-冲刺日志(第七天)
- 盘点经典免费录屏软件,短视频创作必备
- Google log 日志文件
- 如何查看当前Word是即点即用版本还是安装版本
- 程序员成就技术大拿之路
热门文章
- java 队列已满_JAVA中常见的阻塞队列详解
- mysql高级 tigger触发器 --[1]
- android crt证书,android https 抓包,root安装证书
- 《途客圈创业记:不疯魔,不成活》一一1.3 iWeekend创业周末
- MAX40026 280ps高速比较器开发资料原理图源代码
- POj 3164 Command Network最小树形图 模板题 朱刘算法
- hdu 1170 Balloon Comes!(水题)
- mysql嵌套select_select 嵌套查询
- 现在不止是开淘宝店赚钱,淘宝周边产业也赚钱
- 阿里云申请域名过程记录