MySQL入门(2)——存储引擎

查询MySQL支持的存储引擎

查询全部支持的引擎:

show engines;

“;”可以使用“\g”等价替换,而使用“\G”会使输出更为美观。

查询默认存储引擎:

show variables like 'storage_engine%';

InnoDB存储引擎

一般作为默认存储引擎。InnoDB是MySQL上第一个提供外键约束的表引擎。InnoDB拥有MySQL其它引擎无法比拟的事务处理能力。

InnoDB引擎支持自动增长列AUTO_INCREMENT。自动增长列的值不能为空,且值必须唯一。MySQL中规定自增列必须为主键。在插入值时,如果自动增长列不输入值,则插入的值为自动增长后的值;如果输入的值为0或空(NULL),则插入的值也为自动增长后的值;如果插入某个确定值,且该值未在先前出现过,则可以直接插入。

InnoDB引擎支持外键(FOREIGN KEY)。外键所在的表为子表,外键所依赖的表为父表。父表中被子表外键关联的字段必须为主键。当删除、更新父表的某条信息时,子表也必须有相应的更改。InnoDB存储引擎中,创建的表的表结构存储在.frm文件中。数据和索引存储在innodb_data_home_dir和innodb_data_file_path表空间中。

InnoDB优缺点

InnoDB的优势是良好的事务管理、崩溃修复能力和并发控制。缺点是读写效率较差,占用数据空间较大。

InnoDB是如下情况的理想引擎:

  • 更新密集的表:InnoDB存储引擎特别适合处理多重并发的更新请求。
  • 事务:InnoDB引擎是唯一支持事务的标准MySQL存储引擎,是管理敏感数据(如金融信息和用户注册信息)的必需软件。
  • 自动灾难恢复:与其它存储引擎不同,InnoDB表支持自动从灾难中恢复。虽然MyISAM表能在灾难后恢复,但过程复杂。

MyISAM存储引擎

MyISAM曾经是MySQL的默认存储引擎,由ISAM发展而来,解决了ISAM多种缺陷。

MyISAM存储引擎的文件类型

MyISAM存储的表存储成3个文件。文件名称与表名相同,扩展名包括.frm、.MYD、.MYI。

  • .frm:存储表的结构。
  • .MYD:存储数据,即MYData。
  • .MYI:存储索引,即MYIndex。

MyISAM存储引擎的存储格式

基于MyISAM的表有3种存储格式,包括静态型、动态型、压缩型。

  • MyISAM静态:如果所有表列的大小都是静态的(即不使用xBLOB、xTEXT或VARCHAR数据类型),就会自动使用静态MyISAM格式。这种类型的表性能非常高,因为维护和访问预定义格式的数据时开销很低。但这项优点以空间为代价,因为每列都需要分配最大空间,无论是否真正需要使用。
  • MyISAM动态:如果有表列(即使只有一列)定义为动态的(使用xBLOB、xTEXT或VARCHAR),MySQL就会自动使用动态格式。这能够节省空间,但会使性能下降。如果某个字段内容发生改变,则其位置很可能需要移动,这会导致碎片的产生。随着数据集中碎片增加,数据访问性能就会相应下降。修复方法有:

    ① 尽可能使用静态数据类型。

    ② 经常使用OPTIMIZE TABLE语句,以整理表的碎片,恢复由于表更新和删除而导致的空间丢失。
  • MyISAM压缩:有时需要创建整个应用程序生命周期中都只读的表。这种情况下可以使用myisampack工具将其转换为MyISAM压缩表来减少占用空间。在给定硬件条件下性能提升显著。

MyISAM优缺点

MyISAM存储引擎的优势在于占用空间小,处理速度快;缺点是不支持事务的完整性和并发性。

MEMORY存储引擎

MEMORY存储引擎是MySQL存储引擎中的特殊一类,其使用存储在内存中的内容来创建表,且所有数据也放在内存中。这些特性与InnoDB、MyISAM不同。

MEMORY存储引擎的文件存储形式

每个基于MEMORY存储引擎的表实际上对应一个磁盘文件。该文件的文件名与表名相同,类型为.frm。该文件仅存储表的结构,数据文件则存储在内存中,这样有利于对数据快速处理,提高整个表的处理效率。同时需要服务器具备足够的内存以维持MEMORY引擎的表的使用,当不再使用时,可以释放内存删除不需要的表。

MEMORY存储引擎的索引类型

MEMORY存储引擎默认使用哈希(HASH)索引,其速度比使用B树(BTREE)索引快。

MEMORY存储引擎的存储周期

基于内存,且MEMORY通常很少被使用,表基本只供一次性使用。

MEMORY优缺点

MEMORY表大小受限,取决于两个参数max_rows和max_heap_table_size。其中,max_rows可在创建表时指定;max_heap_table_size的大小默认为16MB,可以按需扩大。其存在于内存的特性,决定了这类表处理速度非常快、易丢失、生命周期短的特点。

创建MySQL MEMORY存储引擎的出发点是速度。但是在守护进程mysqld崩溃时,所有的MEMORY数据都会丢失。

MEMORY表不支持VARCHAR、BLOB和TEXT数据类型,即这种表只能按照固定长度的记录格式存储。此外,使用版本4.1.0之前的MySQL,不支持自动增加列(通过AUTO_INCREMENT属性)。

当具有如下情况时,可以考虑使用MEMORY表:

  • 暂时:目标数据临时需要且必须立即可用。
  • 相对无关:数据丢失不会造成实质性负面影响,不会对数据完整性有长期影响。

MySQL入门(2)——存储引擎的更多相关文章

  1. MySQL的多存储引擎架构

    支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将 ...

  2. Mysql更换MyISAM存储引擎为Innodb的操作记录

    一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件.通过下面的命令结果可知,已经安装了innodb插件. mysql> show p ...

  3. mysql缓存、存储引擎

    一.         mysql查询缓存 查询缓存不是mysql的子系统,却是查询优化和执行子系统不可缺少的组成部分.它不仅可以缓存查询结果,还可以缓存查询结果本身.如果某个查询的结果就在缓存里, 系 ...

  4. 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...

  5. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

  6. MySQL数据库InnoDB存储引擎中的锁机制

    MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...

  7. MySQL支持多种存储引擎

    MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

  8. mysql基础之存储引擎

    原文:mysql基础之存储引擎 数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎 常用的表的引擎 Myisam ,批量插入速度快, 不支持事务,锁表 Innodb, 批量 ...

  9. MySQL查看修改存储引擎总结

    文总结了MySQL下查看.修改存储引擎的一些方法.测试.验证环境为MySQL 5.6 1:查看MySQL的存储引擎信息 1.1 使用show engines命令. .csharpcode, .csha ...

  10. MySQL的常见存储引擎介绍与参数设置调优

    MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...

随机推荐

  1. python sort() sorted()的区别

    sorted不保存 sort保存:

  2. mitmproxy 代理工具介绍:rewrite和map local实现

    在接口测试中,会用到抓包工具或者代理工具,常用代理工具包括charles. burpsuite. fiddler.mitmproxy等,ssh -D参数 可实现socks5代理.网络嗅探工具可以使用t ...

  3. 易漏的PEP8语法规范

    import后定义函数的话, 两个空白行. 函数参数内'='左右不加空格. 在写函数说明时, 三引号得是三个双引号.

  4. macOS 录屏 gif

    macOS 录屏 gif LICEcap bug 授权问题? 如何在 Mac 上录制屏幕 https://support.apple.com/zh-cn/HT208721 Command + Shif ...

  5. Java Hipster

    Java Hipster JHipster JHipster is a development platform to quickly generate, develop, & deploy ...

  6. 如何实现一个 markdown 图片粘贴上传的博客后台系统

    如何实现一个 markdown 图片粘贴上传的博客后台系统 js 实现 drag & drop / copy & paste image uploader MongoDB 设计文档对象 ...

  7. Frameworkless Movement

    Frameworkless Movement 无框架运动 https://www.frameworklessmovement.org/ vanilla javascript https://githu ...

  8. js to svg flowchart

    js to svg flowchart flowchart https://flowchart.js.org/ https://github.com/adrai/flowchart.js https: ...

  9. multi selects & mutually exclusive

    multi selects & mutually exclusive 互斥 selects import React, { useState, // useEffect, // useRef, ...

  10. flutter 使用Android studio编辑kt插件

    使用android studio打开/example/android 文件即可