MySQL引擎:InnoDB VS MyISAM
文章目录
- InnoDB特点 VS MyISAM特点
- InnoDB存储引擎:
- MyISAM存储引擎:
- InnoDB索引 VS MyISAM索引
- InnoDB索引:
- MyISAM索引:
InnoDB特点 VS MyISAM特点
MySQL提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。
在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。MySQL 8.0支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。
其中,最常用的引擎是InnoDB和MyISAM。
InnoDB存储引擎:
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5之后,InnoDB作为默认存储引擎:
InnoDB 主要特性如下:
InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表与其他MySQL表的类型混合起来,甚至在同一个查询中也可以混合。
InnoDB是为处理巨大数据量的最大性能设计。
它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
InnoDB存储引擎完全与MySQL服务器整合,为在主内存中缓存数据和索引而维持它自己的缓冲池。
InnoDB将它的表和索引存在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
InnoDB支持外键完整性约束(FOREIGN KEY)。
存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6B的ROWID,并以此作为主键。
InnoDB被用在众多需要高性能的大型数据库站点上。
InnoDB不创建目录,使用InnoDB时,MySQL将在数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。
MyISAM存储引擎:
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务。
MyISAM的主要特性如下:
- 在支持大文件(达63位文件长度)的文件系统和操作系统上被支持。
- 当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块以及若下一个块被删除则扩展到下一块来自动完成。
- 每个MyISAM表最大的索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16个。
- 最大的键长度是1000B,这也可以通过编译来改变。对于键长度超过250B的情况,一个超过1024B的键将被用上。
- BLOB和TEXT列可以被索引。
- NULL值被允许在索引的列中,这个值占每个键的0~1个字节。
- 所有数字键值以高字节优先被存储,以允许一个更高的索引压缩。
- 每个表一个AUTO_INCREMENT列的内部处理。MyISAM为INSERT和UPDATE操作自动更新这一列,这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。
- 可以把数据文件和索引文件放在不同目录。
- 每个字符列可以有不同的字符集。
- 有VARCHAR的表可以固定或动态记录长度。
- VARCHAR和CHAR列可以多达64KB。
InnoDB索引 VS MyISAM索引
InnoDB索引:
InnoDB索引分为聚簇索引与非聚簇索引(二级索引、辅助索引)
PS:非聚簇索引也叫二级索引、辅助索引,不用多想,以后看到这些名字也别着急了。
- 聚簇索引:主键值作为索引数据,叶子节点还包含了所有字段数据,索引和数据是存储在一起的
- 非聚簇索引(二级索引、辅助索引):除主键外的其它字段建立的索引称为非聚簇索引(二级索引、辅助索引)。被索引的字段值作为索引数据,叶子节点还包含了主键值
其他功能支持:
- 支持事务
- 通过 undo log 支持事务回滚、当前读(多版本查询)
- 通过 redo log 实现持久性
- 通过两阶段提交实现一致性
- 通过当前读、锁实现隔离性
- 支持行锁、间隙锁
- 支持外键
聚簇索引:主键值作为索引数据,叶子节点还包含了所有字段数据,索引和数据是存储在一起的
- 主键即 7369、7499、7521 等
非聚簇索引(二级索引、辅助索引):除主键外的其它字段建立的索引称为二级索引。被索引的字段值作为索引数据,叶子节点还包含了主键值
- 上图中 800、950、1100 这些是工资字段的值,根据它们建立了二级索引
- 上图中,如果执行查询
select empno, ename, sal from emp where sal = 800
,这时候可以利用二级索引定位到 800 这个工资,同时还能知道主键值 7369 - 但 select 字句中还出现了 ename 字段,在二级索引中不存在,因此需要根据主键值 7369 查询聚簇索引来获取 ename 的信息,这个过程俗称回表
MyISAM索引:
MyISAM索引只有一种:
- 被索引字段值作为索引数据,叶子节点还包含了该记录数据页地址,数据和索引是分开存储的
其他功能支持:
- 不支持事务,没有 undo log 和 redo log
- 仅支持表锁
- 不支持外键
- 会保存表的总行数
被索引字段值作为索引数据,叶子节点还包含了该记录数据页地址,数据和索引是分开存储的
MySQL引擎:InnoDB VS MyISAM相关推荐
- MySQL存储引擎InnoDB,MyISAM
MySQL存储引擎InnoDB,MyISAM 1.区别: (1)InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQ ...
- 常用Mysql存储引擎--InnoDB和MyISAM简单总结
常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52| 分类: CCST|举报|字号 订阅 MySQL服务器采用了模块化风格,各部分之间保持相对独立, ...
- MySQL存储引擎InnoDB和MyISAM的区别
文章目录 前言 一.MySQL 引擎 二.MyISAM和InnoDB特点 三.InnoDB和MyISAM的区别 总结 前言 面试经常会问到MySQL存储引擎的相关内容.常见的MySQL存储引擎有MyI ...
- 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的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了.所以今天在这里用最简短的语言让你明白这些 ...
- mysql聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/21aspnet/article/details/89303988 聚集索引和非聚集索引以及MySQL的 ...
- 数据库存储引擎—InnoDB,MyISAM,Memory
数据库存储引擎-InnoDB,MyISAM 存储引擎 首先,什么是存储引擎: Mysql用各种不同的存储技术,将数据存储到文件或内存中.数据库存储引擎是数据库的底层的软件组件,数据库可以使用数据存储引 ...
- mysql数据库引擎InnoDB和MyISAM的区别
InnoDB支持行级锁和表级锁(默认行级锁),支持事务,外部键等:大量的insert和update更快等.只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁. MyI ...
- 数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?
InnoDB.MyISAM两种存储引擎的大致区别? 1.InnoDB支持事务,MyISAM不支持, 这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyI ...
最新文章
- python list合并_python中如何合并两个列表
- 了解HAProxy原理及参数
- react 点击两次_javascript – 为什么在React中需要两次绑定onClick?
- 学习C/C++的简单方法
- 案例:Xshell 成功创建定时任务(解决no crontab for root using an empty one问题)- 最新版
- 电脑显示苹果5s未连接服务器怎么办啊,iphone5s数据线连接不上电脑怎么办【解决方法】...
- Sphinx 文档例子
- 每日算法系列【LeetCode 523】连续的子数组和
- 有关嵌入式、单片机、51单片机、STM32、的一些概念详解
- 计算机毕业设计——基于SSM框架的公寓租房管理系统的设计与实现
- 当前流行的PE系统最纯净、最轻量、最快捷
- 计算机一级证书英文 简历,通用于计算机英文简历范文
- python做数据透视表_Python pandas中强大的数据透视表
- Banner(轮播)
- 致所有看到这段话的朋友们
- Android 如何开发指纹支付
- Sublime text 3最新版破解方法
- 二、web通信知识拓
- 极域电子教室远程操作命令运行应用程序
- 私域运营中,企业私域流量挖掘用户价值的三种手段
热门文章
- PDF格式和HTML,XML格式
- linux设备授权命令,# Linux命令
- sql server 2008 R2 与 sql server 2012 下载地址(包括x86、x64)
- [JMX一步步来] 2、JMX简介
- 如何使用WordPress建立一个博客、网站和论坛
- android 游戏降低画质6,怎么改善Android游戏的画质?
- import pyrender找不到指定模块
- python powerbi知乎_利用Python调用Power BI REST API
- jdbc localhost mysql_JDBC连接MySQL
- 包教包会—全网最易懂的全加器高位进位和低位进位讲解