mysql存储引擎区别有哪些

mysql中存储引擎的区别:以innodbmyisam为例,前者支持事务而后者不支持;前者强调多功能性,支持的拓展功能比较多,后者主要侧重于性能;前者不支持全文索引,而后者支持全文索引等

mysql存储引擎区别有哪些

mysql支持存储引擎有好几种,咱们这里主要讨论一下常用的几种存储引擎。Innodb,myisam

INNODB

INNODB索引实现

与 MyISAM相同的一点是,InnoDB 也采用 B+Tree这种数据结构来实现 B-Tree索引。而很大的区别在于,InnoDB 存储引擎采用“聚集索引”的数据存储方式实现B-Tree索引,所谓“聚集”,就是指数据行和相邻的键值紧凑地存储在一起,注意 InnoDB 只能聚集一个叶子页(16K)的记录(即聚集索引满足一定的范围的记录),因此包含相邻键值的记录可能会相距甚远。

在 InnoDB 中,表被称为 索引组织表(index organized table),InnoDB 按照主键构造一颗 B+Tree (如果没有主键,则会选择一个唯一的并且非空索引替代,如果没有这样的索引,InnoDB则会隐式地定义一个主键来作为聚集索引),同时叶子页中存放整张表的行记录数据,也可以将聚集索引的叶子节点称为数据页,非叶子页可以看做是叶子页的稀疏索引。

下图说明了 InnoDB聚集索引的实现方式,同时也体现了一张 innoDB表的结构,可以看到,InnoDB 中,主键索引和数据是一体的,没有分开。

mysql存储引擎区别有哪些

这种实现方式,给予了 InnoDB 按主键检索的超高性能。可以有目的性地选择聚集索引,比如一个邮件表,可以选择用户ID来聚集数据,这样只需要从磁盘读取较少并且连续的数据页就能获得某个id的用户全部的邮件,避免了读取分散页时所耗费的随机I/O。

InnoDB 则是 I/O 操作,Innodb读写采用MVCC来支持高并发。

全表扫描

当InnoDB做全表扫描时并不高效,因为 InnoDB 实际上并没有顺序读取,在大多情况下是在随机读取。做全表扫描时,InnoDB 会按主键顺序扫描页面和行。这应用于所有的InnoDB 表,包括碎片化的表。如果主键页表没有碎片(存储主键和行的页表),全表扫描是相当快,因为读取顺序接近物理存储顺序。但是当主键页有碎片时,该扫描就会变得十分缓慢

行级锁

提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如

Waymark Waymark

Waymark是一个视频制作工具,帮助企业快速轻松地制作高影响力的广告。

Waymark 79 查看详情 Waymark

update table set num=1 where name like “%aaa%”

MYISAM

MyISAM索引的实现

每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。MyISAM索引文件【.MYI (MYIndex)】和数据文件【.MYD (MYData)】是分离的,索引文件仅保存记录所在页的指针(物理位置),通过这些地址来读取页,进而读取被索引的行。先来看看结构图 

mysql存储引擎区别有哪些

上图很好地说明了树中叶子保存的是对应行的物理位置。通过该值,存储引擎能顺利地进行回表查询,得到一行完整记录。同时,每个叶子页也保存了指向下一个叶子页的指针。从而方便叶子节点的范围遍历。 而对于二级索引,在 MyISAM存储引擎中以与上图同样的方式实现,这也说明了 MyISAM的索引方式是“非聚集的”,与 Innodb的“聚集索引”形成了对比

MyISAM 默认会把索引读入内存,直接在内存中操作;

表级锁

小结:Innodb强调多功能性,支持的拓展功能比较多,myisam主要侧重于性能

区别

1、InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;

2、InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

3、InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

4、Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;

以上就是mysql存储引擎区别有哪些的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 04:11:50
下一篇 2025年12月2日 04:12:11

相关推荐

  • mysql InnoDB的四种锁定范围是什么

    1、记录锁,锁定索引中的记录。 2、间隙锁。 要么锁定索引记录中间的值,要么锁定第一个索引记录前面的值,要么锁定最后一个索引记录后面的值。 3、临键锁,是索引记录上的记录锁和索引记录前的间隙锁的组合。 4、插入意向锁,在insert操作中添加记录id的锁。 实例 — id 列为主键列或唯一索引列U…

    数据库 2025年12月5日
    000
  • 【原创】利用MySQL触发器高性能造数据

    MySQL触发器功能比较简单,大部分只用来简单的更新第三方表,今天我来演示下MySQL触发器在造数据方面的功效。下面是基表结果:CREATETABLE`tb1`(&n..  mysql 触发器功能比较简单,大部分只用来简单的更新第三方表,今天我来演示下mysql触发器在造数据方面的功效。  …

    2025年12月2日
    000
  • 关于InnoDB型数据库优化的实例详解

    innodb是为mysql处理巨大数据量时的最大性能设计。它的cpu效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中innodb是倍受青睐的。那么它就不需要优化了吗,答案很显然:当然不是!!! 学习计划很容易就被打断,坚持也不容易。最近公司里开会,要调整业务方向,建…

    2025年12月2日
    000
  • mysql innodb 配置 raw,实现linux下绕过内核缓冲区,实现直接I/O

    (转自linux社区) MySQL 的 InnoDB 存储引擎不仅可以缓存索引,而且还可以缓存数据,如果将其表和索引存储在裸设备(Raw Device)上,从而绕过了文件系统的高速缓存和缓冲器而直接访问磁盘,那么将大大降低Linux文件系统的负担,使系统性能获得显著改善。 另外,从裸设备在数据库应用…

    2025年12月2日
    000
  • MySQL InnoDB和MyISAM数据引擎的差别分析详解

    innodb和myisam是在使用mysql最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:myisam类型不支持事务处理等高级处理,而innodb类型支持 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高…

    2025年12月2日
    000
  • 超详细的mysql存储引擎——InnoDB的讲解

    如果想看自己的数据库默认使用的那个存储引擎,可以通过使用命令: SHOW VARIABLES LIKE ‘storage_engine’; 一、InnoDB存储引擎 1.InnoDB是事务型数据库的首选引擎 支持事务安全表(ACID) 事务的ACID属性:即原子性、一致性、隔离性、持久性 a.原子性…

    2025年12月2日 数据库
    000
  • 如何安装mysql支持InnoDB_mysql InnoDB支持安装方法

    首先确认MySQL是否支持InnoDB,通过SHOW ENGINES;检查状态是否为ACTIVE或DEFAULT;接着在配置文件中确保[mysqld]段落包含innodb=ON;然后重启MySQL服务;最后用SHOW ENGINES LIKE ‘InnoDB’;验证Suppo…

    2025年12月2日 数据库
    000
  • MySQL中optimize优化表_MySQL

    前言 当对MySQL进行大量的增删改操作的时候,很容易产生一些碎片,这些碎片占据着空间,所以可能会出现删除很多数据后,数据文件大小变化不大的现象。当然新插入的数据仍然会利用这些碎片。但过多的碎片,对数据的插入操作是有一定影响的,此时,我们可以通过optimize来对表的优化。 为了更加直观的看到数据…

    2025年12月2日 数据库
    000
  • MySql-体系结构以及各种文件类型_MySQL

    mysql体系结构 由数据库和数据库实例组成,是单进场多线程架构。 数据库:物理操作系统文件或者其它文件的集合,数据库文件可以是frm、myd、myi、ibd等结尾的文件。当使用ndb存储引擎时候,不是os文件,是存放于内存中的文件。数据库实例:由数据库后台进程/线程以及一个共享内存区组成,共享内存…

    2025年12月2日 数据库
    000
  • MySQL的InnoDB扩容及ibdata1文件瘦身方案完全解析_MySQL

    mysql的innodb扩容为了添加一个数据文件到表空间中,首先要关闭 MySQL 数据库,编辑 my.cnf 文件,确认innodb ibdata文件的实际情况和my.cnf的配置是否一致,这里有两种情况:1.my.cnf的配置 innodb_data_file_path=ibdata1:10G;…

    2025年12月2日
    000
  • MySQL两大存储引擎InnoDB与MyISAM的区别

    1.innodb存储引擎    MySQL5.5中InnoDB成为默认的存储引擎。InnoDB是事务型存储引擎,被设计用来处理大量的短期事务。它的性能和自动崩溃恢复特性,使得它在非事务场景中也很流行。    所以可以这么说:“除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都…

    2025年12月2日
    000
  • MySQL数据库InnoDB引擎行级锁锁定范围详解

    mysql数据库innodb引擎支持行级锁,也就是说我们可以对表中某些行数据执行锁定操作,锁定操作的影响是:如果一个事物对表中某行执行了锁定操作,而另一个事务也需要对同样的行执行锁定操作,这样第二个事务的锁定操作有可能被阻塞,一旦被阻塞第二个事务只能等到第一个事务执行完毕(提交或回滚)或超时。 本文…

    2025年12月2日
    000
  • MySQL之锁和事务隔离级别(介绍)

    如今的互联网,开发一个大型的多人app,你一定离不开数据库。而如何保证所有人能够高并发的进行读写一直是一个高难度的架构问题,先刨去高并发,保证一致性读写这个问题最常用的手段是事务,而实现一个事务的关键点在于锁机制。 今天我们就来介绍下InnoDB存储引擎如何在高并发下实现锁机制来满足一致性读写的原理…

    2025年12月2日 数据库
    000
  • MySQL中InnoDB和MyISAM的存储引擎的差异

    mysql数据库区别于其他数据库的很重要的一个特点就是其插件式的表存储引擎,其基于表,而不是数据库。由于每个存储引擎都有其特点,因此我们可以针对每一张表来挑选最合适的存储引擎。 作为DBA,我们应该深刻的认识存储引擎。今天介绍两种最常见的存储引擎和它们的区别:InnoDB和MyISAM。 InnoD…

    2025年12月2日 数据库
    000
  • InnoDB和MyISAM存储引擎有什么不同

    innodb和myisam存储引擎的不同点: InnoDB存储引擎: 当前MySQL存储引擎中的主流,InnoDB存储引擎支持事务、支持行锁、支持非锁定读、支持外键。 MyISAM存储引擎: Ai Mailer 使用Ai Mailer轻松制作电子邮件 49 查看详情 MyISAM不支持事务,不支持行…

    2025年12月2日 数据库
    000
  • 了解InnoDB的Checkpoint技术

    .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,…

    2025年12月2日 数据库
    000
  • mysql innodb异常怎么处理

    一、回退重新装mysql 为避免再从其他地方导入这个数据的麻烦,先对当前库的数据库文件做了个备份(/var/lib/mysql/位置)。接下来将percona server 5.7包进行了卸载,重新安装原先老的5.1.71的包,启动mysql服务,提示unknown/unsupported tabl…

    2025年12月2日 数据库
    000
  • mysql如何升级InnoDB存储引擎_mysql InnoDB升级方法

    升级InnoDB需通过升级MySQL服务器实现,因InnoDB为内置引擎。首先查看当前版本:SHOW ENGINE INNODB STATUSG 和 SELECT @@innodb_version, @@version;再通过包管理器(如yum update mysql-server)或手动安装新版…

    2025年12月2日 数据库
    000
  • Mysql Innodb存储引擎之索引与算法的示例分析

    一、概述 索引太少,查询效率低;索引太多程序性能受到影响,索引的使用应该贴合实际情况。innodb 支持的索引包括: 全文检索,使用倒排索引 哈希索引,自适应,不能人为干预,依据缓冲池中的聚集索引页创建,并不会将整张表进行哈希索引,所以建立索引非常快。 B+树索引,传统意义上的索引,目前关系型数据库…

    2025年12月2日 数据库
    000
  • 【原创】InnoDB 和TokuDB的读写分析与比较

    我们知道,在MySQL单机版本里面最流行的也是唯一支持全事务的引擎为INNODB。其特点是数据本身是用B-TREE来组织,数据本身即是庞大的根据主键聚簇的B-TREE索引。 我们知道,在mysql单机版本里面最流行的也是唯一支持全事务的引擎为innodb。 其特点是数据本身是用b-tree来组织,数…

    2025年11月28日
    000

发表回复

登录后才能评论
关注微信