MySQL中InnoDB和MyISAM引擎的对比

MySQL中InnoDB和MyISAM引擎的对比目录 索引对比 锁对比 事务对比 并发 全文索引对比 外键 其他 一.索引对比 1.B+树概念 我们这里关注B+树的两个特性: 1. 叶子节点包含数据data(data并不特指数据库中的某一行数据,也

MySQL中InnoDB和MyISAM引擎的对比

目录

  • 索引对比
  • 锁对比
  • 事务对比
  • 并发
  • 全文索引对比
  • 外键
  • 其他

一.索引对比

1.B+树概念

我们这里关注B+树的两个特性:

  1. 叶子节点包含数据data(data并不特指数据库中的某一行数据,也可以是某个数值,指针等)
  2. 叶子节点均在同一层,且每个节点均可以直接找到上一个或者下一个节点(双向指针,比常规的B+树多了一个指向上一个的指针)

MySQL中InnoDB和MyISAM引擎的对比

2.Innodb

以用户表为例,id为主键,另外name存在索引idx_name

CREATE TABLE `t_user` (
  `id` bigint,
  `name` varchar(10),
  `age` int,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
);

代码100分

插入数据:

代码100分insert into t_user (id,`name`,age) values
(1,'n7',10),
(2,'n6',20),
(3,'n5',30),
(4,'n4',40),
(5,'n3',50),
(6,'n2',60),
(7,'n1',70)

①聚簇索引(聚集索引)

聚簇索引:行数据与键值(主键)紧凑地存储在一起;

InnoDB中表现为:B+树叶子节点的data用于存放行数据(包含主键值、其他列数据、回滚指针、事务id等),物理上索引数据与行数据都放在同一个文件中(.ibd

MySQL中InnoDB和MyISAM引擎的对比

如果没有定义主键,InnoDB会选择一个非空的唯一索引代替。如果没有这样的索引,InnoDB会隐式定义一个主键(DB_ROW_ID)来作为聚簇索引。

②辅助索引

与聚簇索引最大的不同是:B+树的data存放的并不是行数据,而是主键值

select * from t_user where name="n1"时,会先通过idx_name索引找到n1对应的主键的值(id=7),再通过主键值找到行数据 [7,n1,70] 。

MySQL中InnoDB和MyISAM引擎的对比

3.MyISAM 索引

与InnoDB不同,MyISAM并不使用聚簇索引,MyISAM的索引数据和行数据是分开的,物理上分别为.myi索引数据文件和.myd行数据文件(InnoDB 索引和行数据均在.idb文件中)

MyISAM中,主键索引和其他的一般索引在数据结构上并没有什么区别,B+树的data存放的均是数据行地址

主键索引:

MySQL中InnoDB和MyISAM引擎的对比

普通索引:

MySQL中InnoDB和MyISAM引擎的对比

二.锁对比

mysql支持三种锁定级别,行级、页级、表级;

MyISAM支持表级锁定,提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)

InnoDB支持行级锁,但值得注意的是InnoDB的行锁是加到索引上的,所以在某次查找时没有用上索引,InnoDB表同样会锁全表。

三.事务对比

InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,以事务为单位操作可以提高多用户并发操作的性能。

MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择

四.并发

MyISAM读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。

InnoDB 读写阻塞与事务隔离级别相关。

五.全文索引

MyISAM支持FULLTEXT类型的全文索引

InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好

六.外键

MyISAM不支持

InnoDB支持

七.其他

InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。

MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

站在巨人的肩膀上摘苹果:

https://www.jianshu.com/p/8e054da3da05

https://www.cnblogs.com/leonandyou/p/11337273.html

https://www.cnblogs.com/balfish/p/8288891.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9482.html

(0)
上一篇 2023-02-07 10:30
下一篇 2023-02-07

相关推荐

  • 使用Pandas遍历数据的方法

    使用Pandas遍历数据的方法Pandas是Python中的一个强大的数据处理库,它提供了快速、灵活、简洁且易于使用的数据结构,使得数据的处理和分析变得更加容易。其中,遍历数据是数据处理的基础之一,本文将介绍如何使用Pandas遍历数据,包括如何遍历数据中每一行、每一列,以及如何修改数据等操作。

    2024-07-31
    34
  • Python标识符规则

    Python标识符规则在 Python 中,标识符(identifier)是用来标识变量、函数、类、模块等对象的名称。Python 标识符可以是字母、数字、下划线的任意组合,但是不能以数字开头,不能使用关键字作为标识符。

    2024-09-14
    23
  • 技术分享 | Jump Consistent Hash 原理解析(上篇)

    技术分享 | Jump Consistent Hash 原理解析(上篇)作者:傅文辉 之前爱可生开源社区公众号发表了dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析, 阐述了跳跃法相对环割法的性能优势。很多读者表示对其中”跳跃法…

    2023-01-28
    143
  • PostgreSQL 数据库备份与还原[通俗易懂]

    PostgreSQL 数据库备份与还原[通俗易懂]PostgreSQL 数据库备份与还原 目录 备份 还原 栗子 备份 PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以

    2023-04-27
    152
  • 同是5G旗舰手机 小米10和荣耀V30哪个值得入手?

    同是5G旗舰手机 小米10和荣耀V30哪个值得入手?     前一段,小米高管卢伟冰曾发表言论说荣耀销量下滑70%,然而近日荣耀V30却荣登销量冠军狠狠打了小米高管的脸,这让科技圈又变得热闹起来。小米10和荣耀V30哪个好一直以来网友们便争论不休,今…

    2023-02-06
    157
  • MySQL学习 2019-12

    MySQL学习 2019-12启动mysql服务: net start mysql 关闭mysql服务: net stop mysql cmd清屏: cls mysql -V 输出版本信息并且退出 mysql -u 用户

    2022-12-29
    159
  • Python比较符号:使用正确符号简化您的代码!

    Python比较符号:使用正确符号简化您的代码!Python比较符号用于比较两个值,返回一个布尔值True或False。常见的比较符号如下:

    2024-01-31
    100
  • mysql在win下移植

    mysql在win下移植 背景:由于电脑太多垃圾了,重装了系统;但是mysql又不想重装,里面的数据还有用 步骤 把原来的MySQL安装文件压缩,如: mysql-8.0.11-winx64-back.zip 通过u…

    2023-02-25
    146

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注