MySQL存储引擎对比

                                        作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.MySQL的存储引擎
  大家应该知道MySQL的存储引擎应该是表级别的概念,因为我们无法再创建database时指定存储引擎,而是只能在创建表的时候可以明确指定使用哪种存储引擎。因此存储引擎也通常被称作“表类型”。也就是说,存储引擎是负责跟文件系统真正数据打交道的工具,它却决定了表中是如何存储数据的,不用存储引擎他们指出的工作特性是各不相同的。所以,我们在工作时应该选择时候适合自己的存储引擎。
1>.查看MySQL支持的所有存储引擎
 mysql> show engines;
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
rows in set (0.00 sec) mysql>
2>.查看某张表的存储引擎
  使用格式: SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
 mysql> show table status in yinzhengjie like 'students'\G        #我们可以用like来过滤
*************************** . row ***************************
Name: students -------->表名
Engine: InnoDB ------->存储引擎
Version: -------->版本
Row_format: Compact -------->行格式
Rows: -------->现存表中的行数,对于InnoDB的存储引擎的话这个数字可能只是一个估计值,因为innodb支持事物,其中还保存着删除的行数。
Avg_row_length: --------->平均每行所包含的字节数
Data_length: --------->表中数据总体大小,单位是字节
Max_data_length: --------->表能够占用的最大空间,单位为字节。注意,“”则表示没有上线哟!
Index_length: --------->索引的大小,单位也是字节
Data_free: ---------->对于MyISAM表,表示已经分配但尚未使用的空间,其中包含此前删除行之后腾出来的空间。
Auto_increment: ----------->下一个AUTO_INCREMENT的值
Create_time: -- :: ----------->表的创建时间
Update_time: NULL ----------->表数据的最后一次修改时间
Check_time: NULL ------------>使用CHECK TABLE或myisamchk最近一次检查表的时间
Collation: utf8_general_ci ------------->排序规则
Checksum: NULL ------------->如果启动,则为表的checksum
Create_options: ------------->创建表时指定使用的其他选项
Comment: ------------->表的注释信息
row in set (0.00 sec) mysql> show table status in yinzhengjie where name='students'\G #当然用where查询的性能会更好哟!
*************************** . row ***************************
Name: students
Engine: InnoDB
Version:
Row_format: Compact
Rows:
Avg_row_length:
Data_length:
Max_data_length:
Index_length:
Data_free:
Auto_increment:
Create_time: -- ::
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
row in set (0.00 sec) mysql>
3>.行格式
  MySQL的行格式有:
    {DEFAULT|DYNAMIC|FIXED|COMMPRESSED|REDUNDANT|COMPACT},
    
  其中DYNAMIC|FIXED|COMMPRESSED是MyISAM常用的的,而InnoDB即可以使用MyISAM常用的类型还可以使用REDUNDANT|COMPACT等等。
 
二.MyISAM和InnoDB的存储引擎对比
1>.什么是表空间(table space)
  它是由InnoDB管理的特有格式数据文件,内部可同时存储数据和索引。
2>.MyISAM数据存储结果
  MySQL的每个表都在数据库目录下存储三个文件,名称如下:
    a>.tb_name.frm #存储表结构
    b>.tb_name.MYD #存储数据
    c>.tb_name.MYI #存储索引
3>.InnoDB
  Innodb有两种格式:
    a>.innodb_file_per_table=OFF,即是用共享表空间
      每个表一个独有的格式定义文件:tb_name.frm
      还有一个默认位于数据目录下的共享的表空间文件:ibdata#(它是会自动增长的,比如ibdata1,ibdata2,...)
    b>.innodb_file_per_table=ON,即是用独立表空间
      每个表在数据库目录下存储两个文件
        tb_name.frm #存储表结构
        tb_name.ibd #存储数据
4>.修改默认的存储引擎
  通过default_storage_engine服务变量实现。可以用mysql> show variables like '%default%'来查看相应的信息。
三.MySQL各存储引擎的特性
1>.InnoDB存储引擎
  a>.支持事务:
      有事务日志,这些事物日志文件的大小是一致的哟!):ib_logfile#(例如:ib_logfile0,ib_logfile1,....);
  b>.支持外键约束;
  c>.支持MVCC(多版本并发控制);
  d>.支持聚簇索引:
      聚簇索引之外的其他索引,通常称之为辅助索引,一张表聚簇索引只能有一个而辅助索引可以有多个。聚簇索引通常是用主键的方式来实现,(因为主键的数据是不允许重复的);
  e>.行级锁:间隙锁;
  f>.支持使用辅助索引;
  g>.支持自适应的hash索引;
  h>.支持热备份,因此数据不需要离线就可以完成备份啦,当然可能要用独立表空间;
2>.MyISAM
  MyISAM的使用场景:
    只读数据,表较小,能够忍受崩溃后的修复操作和数据丢失,它具有一下特点:
      a>.全文索引
      b>.支持表压缩存放:做数据仓库,能节约存储空间并提升性能
      c>.支持空间索引
      d>.表级锁
      e>.延迟更新索引
      f>.不支持事务、外键和行级锁
      g>.崩溃后无法安全恢复数据
  MySQL的mysql库使用就是MyISAM存储引擎,我们可以使用“mysql> show table status in mysql\G”进行查看。
3>.ARCHIVE(归档)
  仅支持INSERT和SELECT,支持很好压缩功能。应用于存储日志信息,或其他按照时间序列实现的数据采集类的应用。它不支持事物,不能很好的支持索引。
4>.CSV
  将数据存储为CSV格式,不支持索引,仅使用与数据交换场景。说白了就是可以在多种不同的数据库之间来回导入导出数据库的。也就是说我们可以将office的文档保存为CSV就可以直接向MySQL数据库导入哟。
5>.BLACKHOLE
  又名黑洞存储引擎,没有存储机制,任何发往次引擎的数据都会丢弃,其会记录二进制日志,因此,常用于多级复制架构中作中转服务器。
6>.MEMORY
  保存数据在内存中,它是一个内存表(也就是说重启操作系统之后就会丢失该表的数据哟!);常用于保存中间数据,如周期性的聚合数据等,也用于实现临时表,支持hash索引,使用表级锁,不支持BLOB和TEXT数据类型。
7>.MRG_MYISAM
  是MYISAM的一个变种,能够将多个MyISAM表合并成一个虚表。它是传统的MySQL存储引擎,现在基本上很少有人用了,因为一个表的数据内容本来就很大了,人们更多考虑的是如何将一张表的内容如何拆分开来。
8>NDB
  是MySQL CLUSTER中专用的存储引擎。它是集群用的一种存储引擎,但是这种集群案例用的几乎寥寥无几。
 
四.第三方的存储引擎
1>.在线存储引(简称,OLPT),常见的有以下三种:
  XtraDB
    它是增强的InnoDB,有Percona提供。
    编译安装时,下载XtraDB的源码替代MySQL存储引擎中的InnoDB的源码(当然你得把XtraDB的名称改为InnoDB哟)
  PBXT:
    MariaDB自带此存储引擎
    支持引擎级别的复制、外键约束,对SSD磁盘(固态磁盘)提供适当支持,当然也支持事务和MVCC等等。
  TokuDB:
    使用 Fractal Trees索引,适用存储大数据,拥有很好的压缩比,已经被引入MariaDB。
2>.按照列式数据存储引擎分为以下几种4种:
  Infobright
    目前较有名的列式引擎,适用于海量数据存储场景,如PB级别,专为数据分析和数据仓库设计,分为商业版本和社区版本,其他三个都不是特别有名。
  InfiniDB
  MonetDB
  LucidDB
3>.按照开源社区存储引擎分为以下几种:
  Aria:
    前身为Maria,是增强版的MyISAM(支持崩溃后安全恢复,支持数据缓存)
  Groona:
    全文索引引擎
  Mroonga:
    是基于Groona的二次开发版
  OQGraph:
    由open query研发,支持图(网状 )结构的存储引擎
  SphinxSE:
    为Sphinx全文搜索服务器提供了SQL接口
  Spider:
    能将数据切分成不同的分片,比较高效透明的实现了分片(shared),并支持在分片上支持并行查询
 
五.如何选择合适的存储引擎
  我们一般从以下几个维度衡量:
    1>.是否需要事务;
    2>.备份的类型的支持;
    3>.崩溃后的恢复;
    4>.特有的特性;

MySQL存储引擎对比的更多相关文章

  1. mysql学习--MySQL存储引擎对比总结

    一.存储引擎是什么 存储引擎是数据库的核心,对于mysql来说,存储引擎是以插件的形式运行的.MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用.你可以选择适用于服务器. ...

  2. 【mysql】mysql存储引擎

    了解存储引擎我们先看下mysql的体系架构. 上图是mysql的逻辑架构图,可以看到分了几层. 第一层是大部分网路客户端工具,比如php,python  ,JDBC等,主要功能就是连接处理,授权认证等 ...

  3. Mysql存储引擎比较

    Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...

  4. MySQL存储引擎之Myisam和Innodb总结性梳理

    Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...

  5. 【转】mysql存储引擎

    http://www.cnblogs.com/kevingrace/p/5685355.html Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM In ...

  6. MySQL存储引擎差异化实验

    本篇把MySQL最常用的存储引擎给大家做一个介绍,然后通过插入.修改和并发实验来了解和验证一下它们之间的一些差异. 一.MySQL存储引擎简介 存储引擎在MySQL结构里占据核心的位置,是上层抽象接口 ...

  7. 浅谈MySQL存储引擎-InnoDB&MyISAM

    存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...

  8. MySQL存储引擎之Myisam和Innodb总结性梳理-转

    原文链接:https://www.cnblogs.com/kevingrace/p/5685355.html 谢谢楼主 Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 ...

  9. 7.Mysql存储引擎

    7.表类型(存储引擎)的选择7.1 Mysql存储引擎概述 mysql支持插件式存储引擎,即存储引擎以插件形式存在于mysql库中. mysql支持的存储引擎包括:MyISAM.InnoDB.BDB. ...

随机推荐

  1. [CF995F]Cowmpany Cowmpensation[树形dp+拉格朗日插值]

    题意 给你一棵树,你要用不超过 \(D\) 的权值给每个节点赋值,保证一个点的权值不小于其子节点,问有多少种合法的方案. \(n\leq 3000, D\leq 10^9\) 分析 如果 \(D\) ...

  2. [BZOJ4379][POI2015]Modernizacja autostrady[树的直径+换根dp]

    题意 给定一棵 \(n\) 个节点的树,可以断掉一条边再连接任意两个点,询问新构成的树的直径的最小和最大值. \(n\leq 5\times 10^5\) . 分析 记断掉一条边之后两棵树的直径为 \ ...

  3. R实战 第八篇:重塑数据(reshape2)

    数据重塑通常使用reshape2包,reshape2包用于实现对宽数据及长数据之间的相互转换,由于reshape2包不在R的默认安装包列表中,在第一次使用之前,需要安装和引用: install.pac ...

  4. EVA索赔系统JAVA拦截例外站点

    控制面板->JAVA->JAVA控制面板->安全->添加以下例外站点: https://aftersales.i.daimler.com https://swdist.afte ...

  5. 华为云对Kubernetes在Serverless Container产品落地中的实践经验

    华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...

  6. group by 和count的联合使用问题 [转]

    group by 和count的联合使用问题 今天写查询语句遇到一个问题,就是用group by进行分组以后,用count统计分组以后的个数, 开始写的语句大体是: select count(m.fb ...

  7. Mysql设置允许外网访问(图文)

    1.打开mysql.exe(MySQL Command Line Client),输入密码 2.输入:use mysql; 3.查询host输入: select user,host from user ...

  8. react-router JS 控制路由跳转(转载)

    Link组件用于正常的用户点击跳转,但是有时还需要表单跳转.点击按钮跳转等操作.这些情况怎么跟React Router对接呢? 下面是一个表单. <form onSubmit={this.han ...

  9. [转帖]"微信支付"勒索病毒制造者被锁定 传播、危害和疫情终极解密 --- 可以学习下一年火绒团队的分析原理的精神.

    "微信支付"勒索病毒制造者被锁定 传播.危害和疫情终极解密 https://www.cnbeta.com/articles/tech/794851.htm 12月1日,首个要求&q ...

  10. [转帖] CentOS 添加新的CA证书到认证地方

    Install the ca-certificates package: yum install ca-certificates Enable the dynamic CA configuration ...