MySQL常用存储引擎

MySQL常用存储引擎之MyISAM

MySQL5.5之前版本默认存储引擎

临时表

在排序、分组等操作中,当数量超过一定的大小之后,由查询优化器建立的临时表。

MyISAM存储引擎表由MYD和MYI组成

CREATE TABLE `myIsam`(
    `id` int(11) DEFAULT NULL,
    `c1` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

ls -l
myIsam.frm
myIsam.MYD
myIsam.MYI
特性
  • 并发性与锁级别(表级锁)
  • 表损坏修复
    • check table tablename
    • repair table tablename
  • MyISAM表支持的索引类型
  • MyISAM表支持数据压缩
    命令行:myisampack
限制
  • 版本<MySQL5.0时默认表大小为4G
    如存储大表则修改MAX_Rows和AVG_ROW_LENGTH
  • 版本>MySQL5.0时默认支持为256TB
适用场景:
  • 非事务型应用
  • 只读类应用
  • 空间类应用

MySQL常用存储引擎之Innodb

MySQL5.5及之后版本默认存储引擎
Innodb使用表空间进行 数据存储
innodb_file_per_table
ON:独立表空间:tablename.ibd
OFF:系统表空间:ibdataX

show variables like 'innodb_file_per_table';

set global innodb_file_per_table=off;

系统表空间和独立表空间要如何选择

比较:
  • 系统表空间无法简单的收缩文件大小
  • 独立表空间可以通过optimize table命令收缩系统文件
  • 系统表空间会产生IO瓶颈
  • 独立表空间可以同时向多个文件刷新数据
建议:
  • 对Innodb使用独立表空间(MySQL5.6之后默认采用对表空间)

表转移的步骤

把原来存在于系统表空间中的表转移到独立表空间中的方法

步骤:
1、使用mysqldump导出所有数据库表数据
2、停止MySQL服务,修改参数,并删除Innodb相关文件
3、重启MySQL服务,重建Innodb系统表空间
4、重新导入数据

Innodb存储引擎的特性(1)

系统表空间和独立表空间要如何选择

  • Innodb 数据字典信息
  • Undo 回滚段
Innodb存储引擎的特性
  • Innodb是一种事务性存储引擎
  • 完全支持事务的ACID特性
  • Redo Log 和 Undo Log
show variables like 'innodb_log_buffer_size';
show variables like 'innodb_log_files_in_group';
  • Innodb支持行级锁
  • 行级锁可以最大程度的支持并发
  • 行级锁是由存储引擎层实现的
什么是锁
  • 锁对主要作用是管理共享资源的并发访问
  • 锁用于实现事务的隔离性
锁的类型
  • 共享锁(也称读锁)
  • 独占锁(也称写锁)
写锁 读锁
写锁 不兼容 不兼容
读锁 不兼容 兼容
锁的粒度
  • 表级锁
lock table tablename write;
unlock tables;
  • 行级锁
阻塞和死锁
  • 什么是阻塞
    不同锁的兼容性的关系,在有些时刻,一个事务中的锁需要等到另一个事务中的锁释放他所占用的资源,这就形成了阻塞。
  • 什么是死锁
    死锁是指两个或两个以上的事务在执行过程中,相互占用着对方等待的资源而产生的异常。
Innodb状态检查
show engine innodb status;
适用场景
  • Innodb适合于大多数OLTP应用

MySQL常用存储引擎之CSV

文件系统存储特点

数据以文本方式存储在文件中
.CSV文件存储表内容
.CSM文件存储表的元数据如表状态和数据量
.frm文件存储表结构信息

特点
  • 以CSV格式进行数据存储
  • 所有列必须都是不能为NULL的
  • 不支持索引
    不适合大表,不适合在线处理
  • 可以对数据文件直接编辑
    保存文本文件内容
适用场景

适合作为数据交换的中间表
电子表格->CSV文件->MySQL数据目录
数据->CSV文件->其他Web程序

MySQL常用存储引擎之Archive

文件系统存储特点
  • 以zlib对表数据进行压缩,磁盘I/O更少
  • 数据存储在ARZ为后缀的文件中
Archive存储引擎的特点
  • 只支持insert 和select 操作
  • 只允许在自增ID列上加索引
使用场景

日志和数据采集器应用

MySQL常用存储引擎之Memory

文件系统存储特点

也称HEAP存储引擎,所以数据保存在内存中

功能特点
  • 支持HASH索引和BTree索引
  • 所有字段都为固定长度 varchar(10)=char(10)
  • 不支持BLOG和TEXT等大字段
  • Memory存储引擎使用表级锁
  • 最大大小由max_heap_table_size参数决定
容易混淆的概念

Memory存储引擎
VS
临时表

  • 系统使用临时表
    • 超过限制使用Myisam临时表
      -未超限制使用Memory表
  • create temporary table 建立的临时表
使用场景
  • 用于查找或者是映射表,例如邮编和地区的对应表
  • 用于保存数据分析中产生的中间表
  • 用于缓存周期性聚合数据的结果表
    Memory数据易丢失,所以要求数据可再生

MySQL常用存储引擎之Federated

特点
  • 提供了访问远程MySQL服务器上表的方法
  • 本地不存储数据,数据全部放到远程服务器上
  • 本地需要保存表结构和远程服务器的连接信息
如何使用

默认禁止,启用需要在启动时增加federated参数
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name

show engines;
federated=1

create database local;
create database remote;
use remote;
create table remote_fed(id int auto_increment not null, c1 varchar(10) not null default '', c2 char(10) not null default '',primery key(id))engine=innodb;

show create table remote_fed\G
insert into remote_fed(c1,c2) values('aaa','bbb'),('ccc','ddd'),('ddd','fff');
grant select,update,insert,delete on remote.remote_fed to fred_link@'127.0.0.1' identified by '123456';

use local;
create table remote_fed(id int(11) not null auto_increment, c1 varchar(10) not null default '', c2 char(10) not null default '', primary key(id))engine=federated connection='mysql://fred_link:123456@127.0.0.1:3306/remote/remote_fed';

rename table remote_fed to local_fed;
select * from local.local_fed;
delete from local.local_fed where id=2;
use remote;
select * fro remote_fed;
使用场景

偶尔的统计分析及手工查询

如何选择存储引擎

参考条件
  • 事务
  • 备份
  • 崩溃恢复
  • 存储引擎的特有特性

不要混合使用存储引擎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容