MySQL存储引擎

1. 存储引擎

#看你的mysql现在已提供什么存储引擎:

  mysql> show engines;

  

 #看你的mysql当前默认的存储引擎:

 mysql> show variables like '%storage_engine%';

 

1.1. MyISAM

MySql 5.5之前默认的存储引擎

MyISAM 存储引擎由MYDMYI组成

create table testmysam (

  id int PRIMARY key

) ENGINE=myisam

insert into testmysam  VALUES(1),(2),(3)

 

1.1.1. 表压缩

myisampack -b -f /usr/local/mysql/data/mall/testmysam.MYI

 

压缩后再往表里面新增数据就新增不了

insert into testmysam  VALUES(1),(2),(3)

 

 

 

压缩后,需要

myisamchk -r -f  /usr/local/mysql/data/mall/testmysam.MYI

 

1.1.2. 适用场景:

非事务型应用(数据仓库,报表,日志数据)

只读类应用

空间类应用(空间函数,坐标)

 

由于现在innodb越来越强大,myisam已经停止维护

(绝大多数场景都不适合)

 

1.2. Innodb

l  Innodb是一种事务性存储引擎

l  完全支持事务得ACID特性

l  Redo Log Undo Log

l Innodb支持行级锁(并发程度更高)

 

 

show VARIABLES like 'innodb_log_buffer_size'  

 

1.3. CSV

csv格式进行数据存储

所有列都不能为null

不支持索引(不适合大表,不适合在线处理)

可以对数据文件直接编辑(保存文本文件内容)

 

create table mycsv(id int not null,c1 VARCHAR(10) not null,c2 char(10) not null) engine=csv;

insert into mycsv values(1,'aaa','bbb'),(2,'cccc','dddd');

vi /usr/local/mysql/data/mall/mycsv.CSV 修改文本数据 

flush TABLES;

select * from mycsv

create index idx_id on mycsv(id)

 

1.4. Archive

组成

  zlib对表数据进行压缩,磁盘I/O更少

  数据存储在ARZ为后缀的文件中

 

特点:

    只支持insertselect操作

  只允许在自增ID列上加索引

 

create table myarchive(id int auto_increment not null,c1 VARCHAR(10),c2 char(10), key(id)) engine = archive;

create index idx_c1 on myarchive(c1)

INSERT into myarchive(c1,c2) value('aa','bb'),('cc','dd');

delete from myarchive where id = 1

update myarchive set c1='aaa' where id = 1

 

1.5. Memory

1.5.1. 特点

文件系统存储特点

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

支持HASH索引和BTree索引

所有字段都是固定长度 varchar(10) = char(10)

不支持BlogText等大字段

l Memory存储引擎使用表级锁

最大大小由max_heap_table_size参数决定

 

show VARIABLES like 'max_heap_table_size'

 

create table mymemory(id int,c1 varchar(10),c2 char(10),c3 text) engine = memory;

create table mymemory(id int,c1 varchar(10),c2 char(10)) engine = memory;

create index idx_c1 on mymemory(c1);

create index idx_c2 using btree on mymemory(c2);

show index from mymemory

show TABLE status LIKE ‘mymemory’

 

1.5.2. 与临时表的区别

 

 

 

 

1.5.3. 使用场景

l hash索引用于查找或者是映射表(邮编和地区的对应表)

用于保存数据分析中产生的中间表

用于缓存周期性聚合数据的结果表

 

6.6. Ferderated

提供了访问远程MySQL服务器上表的方法

本地不存储数据,数据全部放到远程服务器上

本地需要保存表结构和远程服务器的连接信息

 

使用场景

    偶尔的统计分析及手工查询(某些游戏行业)

 

默认禁止,启用需要再启动时增加federated参数

 

 

show ENGINES

 

create database local; 

 

create database remote; 

 

create table remote_fed(id int auto_increment not null,c1 varchar(10) not null default '',c2 char(10) not null default '',primary key(id)) engine = INNODB

 

INSERT into remote_fed(c1,c2) values('aaa','bbb'),('ccc','ddd'),('eee','fff');

 

 

CREATE TABLE `local_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://root:root1234%@127.0.0.1:3306/remote/remote_fed'

 

 

select * from local_fed

delete from local_fed where id =  2

select * from remote.remote_fed

posted @ 2019-06-19 11:52  SoyWang  阅读(295)  评论(0编辑  收藏  举报