欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql的存储引擎

程序员文章站 2023-11-20 13:08:40
mysql支持的存储引擎 一:查询数据库支持的存储引擎 执行: show engines; 说明 engine:引擎名称。 suppot:是否支持。 comment:说明。 transactions:是够支持事务。 xa:是否支持XA事务。 savepoints:是否支持保存savepoints之间 ......

mysql支持的存储引擎

一:查询数据库支持的存储引擎

执行:  show engines;

mysql的存储引擎

说明

  engine:引擎名称。

  suppot:是否支持。

  comment:说明。

  transactions:是够支持事务。

  xa:是否支持xa事务。

  savepoints:是否支持保存savepoints之间的内容。

 

二:常用的引擎的介绍(常用的myisam和innodb)

.frm文件         //存储表结构的,任何存储引擎都具备的。

1:myisam

   mysql5.5之前默认的存储引擎,由myd和myi组成。

  查看数据库的data目录/数据库名称/,在查找相对应的表名。

  frm,myd,myi这三个结尾的文件。

  .myd  //数据库文件

  .myi  //索引文件  又叫非聚集索引

 

  特性:

    并发性与锁级别-表解锁

    支持全文索引

    支持数据压缩   命令:进入到mysql的bin文件夹, .\myisampack.exe -b -f "需要压缩的test.myi地址" (此命令实在windows运行)。

    运行完以后,会出现一个以old结尾的文件,删除old可能会出现问题。需要恢复 check table 表名,repair table 表名      

  

  适用场景:

    非事务的类型

    只读类应用,读取数据的速度快

    空间类型(坐标,空间函数)

 

2:innodb

  mysql5.5以后默认的存储引擎,innodb_file_per_table  on:表示独立表空间,off:表示系统表空间。5.6之前是系统表空间,之后为独立表空间。

  独立表空间:.frm .ibd  存储数据+索引。 可以通过 optimize table 表名 .ibd收缩数据文件,同时可以向多个文件刷新数据。

  系统表空间:.frm是放在数据库的文件下的。 .ibdata1是放在data文件夹下的,表公用的,会产生io的瓶颈。 系统表空间无法简单的收缩文件大小

  

  建议使用独立表空间。

 

  特性:

    是一种事务性存储引擎。完全支持事务的acid特性。执行行级锁,并发程度高。redo log和undo log。

  适用场景:

    大多数的oltp应用。

 

  比较

  mysql的存储引擎

 

 

3:csv

  数据以文本方式存储,表的字段不能为空,不能有主键。

  .frm , .csv数据的内容, .csm存储表的元数据 。

  使用文本编辑器可以直接编辑.csv数据,然后保存,在数据库里面执行flush  tables;

  注:要在最后一行数据回车一下,要不然最后一条数据不展示。

  在excel里面操作提示兼容性问题,无法操作成功,编辑完以后修复一下,可能是excel版本的问题吧。

  特点:

    以csv格式进行数据存储,所有列的字段都不能为null,不支持索引,可以对数据文件在线编辑。

 

4:archive

  以zlib对表数据进行压缩,磁盘i/o更少,数据存储在.arz。

  .frm , .arz数据的内容。

  特点:

    只支持insert和select操作,只允许在自增id列上加索引。

  使用场景:

    日志和数据采集应用

 

5:memory

  在data文件夹里面只有一个frm。

  数据保存在内存中,支持hash索引和btree索引,所有字段都是固定的长度varchar(10)=char(10),不支持blog和text等字段

  使用表级索,最大有max_heap_table_size 决定。 重启会丢失数据。

  在系统使用临时表的时候,超过限制会使用myisam,未超过的时候使用memory

  

  临时表:在同一个session(会话)里面,才能使用。重启服务会丢失数据。

 

  应用场景:mysql后台服务使用memory

 

 

6:federated

  访问远程的数据库表,本地只保存数据库结构和连接信息,数据保存在远程的服务器中。在本地只保存.frm

  默认不是开启的引擎,在my.ini  增加 federated=1,重启。

  

  只能用命令创建。create table ‘aaa’(里面的字段,要和连接的服务器一样) engine=federated connection='mysql://用户名:密码@地址:ip/数据库名/表名'