Mysql 提供了一套统一的应用开发模型和核心 API,因此,尽管不同的存储引擎拥有不同的特性,不过对于开发人员,应用操作都是完全透明的。应用层的连接并不直接访问存储引擎层,而是访问 Mysql 提供的 Api,也就是说不管所操作的表对象使用什么存储引擎,读写数据时执行的 DDL/DML 语句并没有不同

下面介绍使用最广泛的存储引擎

memory 存储引擎

内存存储引擎,直接把表保存到内存中,在磁盘中只拥有一个 .frm 文件,用来存储表结构的定义

通过指定 engine=memory 设置

当 Mysql 服务关闭时,所有 memory 引擎表中的数据全部会丢失

分配给 memory 引擎表的内存,正常情况不会释放,而是有该表一直持有,即使删除数据,也不会被收回,只有当整个表被删除或者重建时才会回收相关内存

memory 引擎表占用多少内存空间?由两个因素决定

  1. 首先 memory 引擎表能使用的最大内存不能超过 max_heap_table_size 系统设置的值,该值默认情况下是 16MB (还可以在会话时,临时设置 max_heap_table_size 变量的值)

  2. 在创建时通过 CREATE TABLE 语句的 MAX_ROWS 选项,指定表中最大的记录数的方式来限制表能够使用的内存空间

CSV 存储引擎

CSV 存储引擎是基于 CSV 格式文件存储数据

通过指定 engine=csv 设置

CSV 存储引擎因为自身文件格式的原因,所有列必须强制指定 NOT NULL ,另外 CSV 引擎也不支持索引,不支持分区

CSV 存储引擎也会包含一个存储表结构的 .frm 文件,还会创建一个 .csv 存储数据的文件,还会创建一个同名的元信息文件,该文件的扩展名为 .CSM ,用来保存表的状态及表中保存的数据量

因为 csv 文件本身就可以直接被编辑,保不齐就有不按规则出牌的情况,如果出现csv 文件中的内容损坏了的情况,也可以使用 CHECK TABLE 或者 REPAIR TABLE 命令检查和修复

ARCHIVE 存储引擎

ARCHIVE 存储引擎适用场景恰如其名---归档,基于这个存储引擎,能够将大量数据压缩存储,插入的列会被压缩

使用了 zlib 无损数据压缩算法,并且还可以使用 OPTIMIZE TABLE 分析表并使其打包成更小的格式

相同的数据量,ARCHIVE 存储引擎 比 MyISAM 引擎小了近 8 倍

不足点:

  1. 目前 ARCHIVE 引擎仅能够支持 INSERT 和 SELECT 语句,而不能支持 DELETE、REPLACE、UPDATE 语句

  2. 不支持索引

ARCHIVE 引擎除了拥有 .frm 结构文件外,还有一个扩展名为 .arz 的数据文件

BLACKHOLE

黑洞存储引擎,所有插入的数据并不会保存,BLACKHOLE 引擎表永远保持为空

:) 我这里没想到什么适用场景,故不做太多介绍

MERGE 存储引擎

MERGE 存储引擎,也被称为 MGR_MyISAM 存储引擎,它实际上是将一组 MyISAM 表聚合在一起,使用时就和一张表一样

MERGE 存储引擎,要求聚合的表结构、索引要完全一致

使用 engine=merge union=(表名,表名) 创建

除了保存表结构定义的 .frm 文件外,还有一个扩展名为 .mgr 的文件,这个文件不保存数据,而是保存的数据来源地

MERGE 存储引擎出了支持 SELECT 之外,还支持 UPDATE、DELETE 语句

需要支持 insert 语句的话,需要配置 INSERT_METHOD 指定插入的记录保存到哪个表中

INSERT_METHOD 选项有三个值

  1. NO: 不允许插入,这也是默认值

  2. FIRST 插入到第一个表

  3. LAST 插入到最后一个表

MyISAN 存储引擎

如果没有指定表使用的存储引擎,那么创建表的默认存储引擎就是 MyISAN (5.5 以前)

使用 engine=myisam; 设置

默认会创建三个文件

  1. frm 文件,用来存储表的对象结构

  2. .MYD 文件,用来存储数据

  3. .MYI 文件,用来存储索引

MyIASM 特性

  1. 最大存储能力为 256TB

  2. 支持 B-tree 索引

  3. 支持全文索引

  4. 支持索引缓存

  5. 支持数据压缩

  6. 支持复制

  7. 支持查询缓存

  8. 地理(三维)数据类型支持

  9. 地理数据索引支持

  10. 支持数据加密

  11. 支持统计信息

  12. 锁粒度到 table

  13. 支持备份/时间点恢复

MyISAN 不支持的

  1. MVCC 不支持

  2. clustered 索引不支持

  3. hash 索引不支持

  4. 不支持事物

  5. 不支持数据缓存

  6. 不支持外健约束

  7. 不支持行级锁

MyISAM 主要优点是:查询快,写入快

MyISAM 支持三种存储格式:静态(FIXED)、动态(DYNAMIC)、压缩(COMPRESSED)
静态:

静态指的是,表不包含(varchar/varbinary/blob/text)静态表会把以上字段类型会自动填充到达列的长度
较快,易于缓存
易于崩溃后重建
比动态表占用更多的磁盘空间静态表,很容易可以到磁盘中的数据文件定位和查找记录,因为每一行记录都是固定的

动态:

包含(varchar/varbinary/blob/text)
除了字符串长度小于4的列外,其他字符串的长度都是动态的
比静态的更节约空间

压缩:

压缩表是只允许已读的,优点在于更节省空间,更快

InnoDB 存储引擎

mysql 5.5 之后。InnoDB 被认定为默认的存储引擎

InnoDB 有下列关键特性

  1. 设计遵循 ACID 模型,支持事物,拥有从服务崩溃中恢复的能力,能过最大限度的保护用户的数据

  2. 支持行级锁,并且引入了类型 Oracle 数据库中的一致性读特性,以提升多用户并发时的读写性能

  3. InnoDB 引擎表组织数据时按照主键聚族,通过主键查找数据时性能极为优异

  4. 在维护数据完整性方面,InnoDB 支持外建约束

  5. 在服务器发生故障的情况下,Mysql 服务在启动时,会自动进行故障恢复

  6. InnoDB 拥有自己的缓存池,常用的数据和索引都在缓存中

  7. 对于 INSERT,UPDATE,DELETE 操作,会被一种称为 change buffering 的机制自动优化

什么是 ACID ?

即事物的四个特性:原子性、一致性、隔离性、持久性

InnoDB 存储引擎的特点

  1. 存储能力 64TB

  2. 支持 MVCC

  3. 支持 B-tree 索引

  4. 支持 Clustered 索引

  5. 外建约束

  6. 查询缓存

  7. 索引缓存

  8. 数据缓存

  9. 事物

  10. 地理(三维)数据类型支持

  11. 数据加密

  12. 数据压缩

  13. 统计信息

  14. 支持行级锁

  15. 备份/时间点恢复

  16. 复制支持

不支持的功能

  1. 不支持 Hash 索引

  2. 不支持全文索引

  3. 地理数据索引支持

InnoDB 和 MyISAM 的区别

  • InnoDB不支持FULLTEXT类型的索引。

  • InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

  • 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

  • DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

  • LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

  • 另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

  • 两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

有趣的 Mysql 存储引擎 1相关推荐

  1. 有趣的 Mysql 存储引擎

    Mysql 提供了一套统一的应用开发模型和核心 API,因此,尽管不同的存储引擎拥有不同的特性,不过对于开发人员,应用操作都是完全透明的.应用层的连接并不直接访问存储引擎层,而是访问 Mysql 提供 ...

  2. 如何写MySQL存储引擎

    mysql教程:如何写MySQL存储引擎 [日期:2009-04-02]     来源:  作者: 在MySQL 5.1中开发一个存储引擎已经是比较方便了.所谓存储引擎实际上是按照MySQL的约定,提 ...

  3. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  4. mysql存储引擎静态表_MySQL存储引擎(表类型)的选择

    一.MySQL存储引擎概述 MySQL与多数数据库不同的是包含存储引擎这一特性,用户可以根据应用的需要选择合适的存储引擎来使存储和索引数据,以及是否使用事务等.MySQL5.0支持的存储引擎包括MyI ...

  5. mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

  6. 【超简单】MySQL存储引擎的选择与配置

    [超简单]MySQL存储引擎的选择与配置 存储引擎简介 MySQL中的数据用各种不同的技术存储在文件(或内存)中.每一种技术都使用不同的存储机构,索引技巧,锁定水平并且最终提供广泛的不同的功能和能力. ...

  7. 第 3 章 MySQL 存储引擎简介

    3.1 MySQL 存储引擎概述 MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用最为广泛的存储引擎之一.他的前身就是我们在MySQL发展历程中所提到的 ISAM,是ISAM的升 ...

  8. 为什么用B+树做索引MySQL存储引擎简介

    索引的数据结构 为什么不是二叉树,红黑树什么的呢? 首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上.然后一般一个结点一个磁盘块,也就是读一个结点要进行一次 ...

  9. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  10. 第三篇 :Mysql存储引擎、数据导入导出、管理表记录、匹配条件

    一,存储引擎 1,Mysql工作原理 mysql服务 体系结构     管理工具:    命令 连接池:     (空闲进程.内存.CPU) SQL接口:   (客户端与服务器建立连接传递SQL给my ...

最新文章

  1. VS2005中删除最近打开的项目和文件的记录
  2. 新浪微博授权失败:applications over the unaudited use restrictions
  3. 【转】秒杀系统架构分析与实战
  4. Python开发爬虫之理论篇
  5. 5g虚拟技术旅游_5G赋能VR产业变革
  6. 无法从套接字读取更多的数据 oracle_小伙面试时被追问数据库优化,面试前如何埋点反杀?
  7. python颜色表_数据库表连接的简单解释 | 图文并茂,通俗易懂
  8. bug记录:虚拟机ping不通外网
  9. tcp 协议中发送窗口的大小应该是_面试必备--TCP协议中的窗口机制滑动窗口详解...
  10. 基于评论文本的深度推荐系统总结
  11. WebComponent魔法堂:深究Custom Element 之 从过去看现在
  12. 基于springboot+LayUI的校园信息发布平台
  13. attachEvent报错原因
  14. 论坛刷访客神器-Header自定义工具
  15. 2×3卡方检验prism_【SPSS数据分析】方差分析之多因素方差分析(3)Graphpad Prism绘制简单效应折线图...
  16. win10笔记本插上耳机没声音设置
  17. MAYA如何做3D logo
  18. 基于SpringBoot的宿舍管理系统
  19. 2022年贵州省高新技术企业认定奖励补贴及申报条件
  20. 米兔机器人终于拼完了_找回童年的DIY乐趣 米兔积木机器人拼装体验

热门文章

  1. Ubuntu更改hosts档
  2. [转]Linux下Nagios的安装与配置
  3. 设计模式之单实例模式(Singleton)
  4. sql2005中一个xml聚合的例子
  5. 二分图最大匹配的经典匈牙利算法
  6. mac实用小技巧分享之使Mac快速锁屏与睡眠
  7. iOS 解决报错 dyld: Library not loaded: @rpath/xxx.framework Reason: image not found
  8. Maven构建springBoot Demo案例
  9. ThinkPHP5.0之控制器中常用操作
  10. webpack4入门笔记——loader