MySql的存储引擎的不同

这篇具有很好参考价值的文章主要介绍了MySql的存储引擎的不同。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySql的存储引擎的不同

MySQL存储引擎之MyisamInnodb总结性梳理

MyISAMMySQL的默认数据库引擎(5.5版之前),由早期的ISAMIndexed Sequential Access

Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理

transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化

参考完整性与并发违规处理机制,后来就逐渐取代MyISAMInnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDBInnobase Oy

公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAMMyISAM相比,InnoDB的最大特色就

是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,

一是GPL授权,另一是专有软件授权。

MyISAMInnoDB两者之间有着明显区别,简单梳理如下:

1) 事务支持

MyISAM不支持事务,而InnoDB支持。InnoDBAUTOCOMMIT默认是打开的,即每条SQL语句会默认

被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begincommit

之间,组成一个事务去提交。

MyISAM是非事务安全型的,而InnoDB是事务安全型的,默认开启自动提交,宜合并事务,一同提交,

减小数据库多次提交导致的开销,大大提高性能。

2) 存储结构

MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件

类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI

(MYIndex)

InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),

InnoDB表的大小只受限于操作系统文件的大小,一般为2GB

3) 存储空间

MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能

有空格,会被去掉)、动态表、压缩表。

InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

4) 可移植性、备份及恢复

MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针

对某个表进行操作。

InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G

时候就相对痛苦了。

5) 事务支持

MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。

InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修

复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

6) AUTO_INCREMENT

MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动

增长可以不是第一列,他可以根据前面几列进行排序后递增。

InnoDBInnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必

须是组合索引的第一列。

7) 表锁差异

MyISAM:只支持表级锁,用户在操作myisam表时,selectupdatedeleteinsert语句都会给表自

动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。

InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是

InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

MyISAM锁的粒度是表级,而InnoDB支持行级锁定。简单来说就是, InnoDB支持数据行锁定,而

MyISAM不支持行锁定,只支持锁定整个表。即MyISAM同一个表上的读锁和写锁是互斥的,MyISAM

发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以

MyISAM不适合于有大量查询和修改并存的情况,那样查询进程会长时间阻塞。因为MyISAM是锁表,所

以某项读操作比较耗时会使其他写进程饿死。8) 全文索引

MyISAM:支持(FULLTEXT类型的)全文索引

InnoDB:不支持(FULLTEXT类型的)全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效

果更好。

全文索引是指对charvarchartext中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引

其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空格再写到数据表里,而且少于4个汉字

的词会和停用词一样被忽略掉。

另外,MyIsam索引和数据分离,InnoDB在一起,MyIsam天生非聚簇索引,最多有一个unique的性

质,InnoDB的数据文件本身就是主键索引文件,这样的索引被称为聚簇索引

9) 表主键

MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。

InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是

主索引的一部分,附加索引保存的是主索引的值。InnoDB的主键范围更大,最大是MyISAM2倍。

10) 表的具体行数

MyISAM:保存有表的总行数,如果select count() from table;会直接取出出该值。

InnoDB:没有保存表的总行数(只能遍历),如果使用select count() from table;就会遍历整个表,消耗

相当大,但是在加了wehre条件后,myisaminnodb处理的方式都一样。

11) CURD操作

MyISAM:如果执行大量的SELECTMyISAM是更好的选择。

InnoDB:如果你的数据执行大量的INSERTUPDATE,出于性能方面的考虑,应该使用InnoDB表。

DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的

删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。

12) 外键

MyISAM:不支持

InnoDB:支持

13) 查询效率

没有wherecount()使用MyISAM要比InnoDB快得多。因为MyISAM内置了一个计数器,count()时它直接

从计数器中读,而InnoDB必须扫描全表。所以在InnoDB上执行count()时一般要伴随where,且where

要包含主键以外的索引列。为什么这里特别强调主键以外?因为InnoDBprimary index是和raw data

存放在一起的,而secondary index则是单独存放,然后有个指针指向primary key。所以只是count()的话

使用secondary index扫描更快,而primary key则主要在扫描索引同时要返回raw data时的作用较大。

MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM

通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的

特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯

定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类

型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑

MyISAM的,这个具体情况可以自己斟酌。

MyISAMInnoDB两者的应用场景:

1) MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的

SELECT查询,那么MyISAM是更好的选择。

2) InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的

INSERTUPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

但是实际场景中,针对具体问题需要具体分析,一般而言可以遵循以下几个问题:

- 数据库是否有外键?

- 是否需要事务支持?

- 是否需要全文索引?

- 数据库经常使用什么样的查询模式?在写多读少的应用中还是Innodb插入性能更稳定,在并发情况下也能基本,如果是对读取速度要求比较快的应用还是选MyISAM

- 数据库的数据有多大? 大尺寸倾向于innodb,因为事务日志,故障恢复。 文章来源地址https://www.toymoban.com/news/detail-455734.html

到了这里,关于MySql的存储引擎的不同的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL事务与存储引擎

    是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求u,即这一组数据库命令要么都执行,要么都不执行 是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作,事务是最小的控制单元 适用于多用

    2024年02月09日
    浏览(33)
  • MySQL-存储引擎

    1、 指定存储引擎 2、 查看数据库支持的存储引擎 show   engines; 3、InnoDB引擎         1、高性能,可靠安全性的存储引擎         2、 有三个特性,                 事务,                 行级锁,                 外键,                 文件格

    2024年01月19日
    浏览(34)
  • MySQL 事务与存储引擎

    目录 一、MySQL事务的概念 二、事务的ACID特点 2.1 原子性 2.2 一致性 2.3 隔离性  2.4 持久性 2.5 事务之间的相互影响  三、Mysql及事物隔离级别 3.1 查询全局事务隔离级别  3.2 查询会话事务隔离级别   3.3 设置全局事务隔离级别   3.4 设置会话事务隔离级别   四、事务控制语

    2024年02月16日
    浏览(30)
  • MySQL----事物与存储引擎

    事务是一种机制、一个操作序列,包含了一组数据库操作命令(增删改),并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单元, 在数据库系统上执行并发操作时,事务是最

    2024年02月10日
    浏览(40)
  • MySQL的存储引擎

    MyISAM:这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。 MyISAM Merge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日

    2024年02月17日
    浏览(37)
  • MySQL—存储引擎(下)

    ♥️ 作者:小刘在C站 ♥️ 个人主页: 小刘主页 ♥️ 每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 树高千尺,落叶归根人生不易,人间真情 前言 上一章讲了存储引擎,本章继续,从特点开始 目录 MySQL 1.存

    2024年02月07日
    浏览(62)
  • MySQL——存储引擎

    MySQL数据库主要的存储引擎:        MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大

    2024年02月09日
    浏览(27)
  • MySQL—存储引擎(上)

    ♥️ 作者:小刘在C站 ♥️ 个人主页: 小刘主页 ♥️ 每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 树高千尺,落叶归根人生不易,人间真情 目录 1). 连接层 2). 服务层 3). 引擎层 4). 存储层 存储引擎介绍 1

    2024年02月07日
    浏览(29)
  • MySQL- 存储引擎

    连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以

    2024年02月04日
    浏览(33)
  • Mysql高级1-存储引擎

      1.1、连接层 最上层是一个客户端和链接服务,主要完成一些类似于链接处理,授权认证,及相关的安全方案,服务器也会为安全接入的而每个客户端验证它所具有的操作权限 1.2、服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析

    2024年02月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包