MySQL入门(2)——存储引擎
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)——存储引擎的更多相关文章
- MySQL的多存储引擎架构
支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将 ...
- Mysql更换MyISAM存储引擎为Innodb的操作记录
一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件.通过下面的命令结果可知,已经安装了innodb插件. mysql> show p ...
- mysql缓存、存储引擎
一. mysql查询缓存 查询缓存不是mysql的子系统,却是查询优化和执行子系统不可缺少的组成部分.它不仅可以缓存查询结果,还可以缓存查询结果本身.如果某个查询的结果就在缓存里, 系 ...
- 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...
- MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
文/何登成 导读: 来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...
- MySQL数据库InnoDB存储引擎中的锁机制
MySQL数据库InnoDB存储引擎中的锁机制 http://www.uml.org.cn/sjjm/201205302.asp 00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...
- MySQL支持多种存储引擎
MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...
- mysql基础之存储引擎
原文:mysql基础之存储引擎 数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎 常用的表的引擎 Myisam ,批量插入速度快, 不支持事务,锁表 Innodb, 批量 ...
- MySQL查看修改存储引擎总结
文总结了MySQL下查看.修改存储引擎的一些方法.测试.验证环境为MySQL 5.6 1:查看MySQL的存储引擎信息 1.1 使用show engines命令. .csharpcode, .csha ...
- MySQL的常见存储引擎介绍与参数设置调优
MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...
随机推荐
- 忘记Mysql的root用户密码处理方法(以mysql 5.5.33为例)
1.修改mysql服务器的脚本 ~]#vi /etc/rc.d/init.d/mysqld #找到$bindir/mysqld_safe --datadir="$datadir" ...
- tensorflow报错:Attempting to fetch value instead of handling error Internal: failed to get device attribute 13 for device 0: CUDA_ERROR_UNKNOWN:
就是在spyder跑上一篇文章的代码然后就报错: Attempting to fetch value instead of handling error Internal: failed to get ...
- 关于malloc/free用法
和很多人一样,我一直觉得new/delete和malloc/free的用法很随意,直到我真正遇到了麻烦,才想着去好好区分一下. (1)首先mallo函数原型void* malloc(size_t).头 ...
- 读js DOM编程艺术总结
第一章主要介绍一些历史性问题,javascript是Netcape和sun公司合作开发的. 第二章JavaScript语法: 1,数据类型:(弱类型)字符串,数值,布尔值(只有true和false,不 ...
- 杭电多校HDU 6599 I Love Palindrome String (回文树)题解
题意: 定义一个串为\(super\)回文串为: \(\bullet\) 串s为主串str的一个子串,即\(s = str_lstr_{l + 1} \cdots str_r\) \(\bullet\ ...
- 基于vue3.0+electron新开窗口|Electron多开窗体|父子模态窗口
最近一直在折腾Vue3+Electron技术结合的实践,今天就来分享一些vue3.x和electron实现开启多窗口功能. 开始本文之前,先来介绍下如何使用vue3和electron来快速搭建项目. ...
- 大数据开发--Hbase协处理器案例
大数据开发--Hbase协处理器案例 1. 需求描述 在社交网站,社交APP上会存储有大量的用户数据以及用户之间的关系数据,比如A用户的好友列表会展示出他所有的好友,现有一张Hbase表,存储就是当前 ...
- Python_K-means算法
from sklearn import cluster [centroid, label, inertia] = cluster.k_means(data_to_be_classified, num_ ...
- taro ref & wx.createSeletorQuery
taro ref & wx.createSeletorQuery https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.cr ...
- 「NGK每日快讯」12.21日NGK第48期官方快讯!