MySQL系列-存储引擎

MySQL的存储引擎主要包含:

MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等等。其中InnoDB和BDB是支持事务安全表,其他都是非事务安全表。各种引擎特点对比:

以上几个规则引擎中,其中MyISAM和InnoDB最常用,所以以下就对这两个规则引擎进行介绍。

MyISAM:

特点:
  • 不支持事务
  • 不支持外键
  • 访问速度快
  • 支持表级锁

MyISAM适合只有insert 和 select的场景。每个MyISAM在磁盘上存储成三个文件,文件名和数据表名相同,但扩展名不同:

  • .frm(存储表定义)
  • .MYD(存储数据)
  • .MYI(存储索引) 数据文件和索引文件如果放在不同的目录则可以平均IO,更有利于操作速度。在创建数据表的时候可以通过DATA DIRECTORY 和 INDEX DIRECTORY 语句指定数据文件的位置和索引文件的位置,需要注意的是指定的路径需要是绝对路径且需要有访问的权限。
MyISAM还支持三种不同的存储格式:
  • 静态表(固定长度): 默认的存储格式,字段都是非变长字段,优点:存储迅速、容易缓存、容易恢复 缺点:占用的空间较多,存储的时候会安装列的宽度定义补足空格,但是查询的时候会去掉这部分空格;所以如果我们本身就想在已有的字段内容前后加空格的话,查询的时候也会被去掉。这一点必须要注意。
  • 动态表:变长字段, 优点:占用的空间少 缺点:频繁更新、删除会产生空间碎片,需要执行OPTIMIZE TABLE或myisamchk-r命令来改善性能。
  • 压缩表:占用的磁盘空间非常小,但是恢复很困难

InnoDB:

特点
  • 支持事务
  • 自动增长列,自增长列必须是索引,如果是组合索引也必须是第一列,这个一点和MyISAM不同
  • 支持外键约束
  • 支持行级锁 适合需要事务支持的场景。操作效率相对于MyISAM相对低一些。
InnoDB支持两种存储方式:
  • 使用共享表空间存储,这种方式创建表的结构报错在.frm文件中,数据和索引分别报错在innodb_data_home_dir和innodb_data_file_path指定的对应地址。
  • 使用多表空间存储,这种方式创建的表的结构也是存储在.frm文件中,但是每个表的索引和数据单独存储在.ibd中,如果是分区表则,每个分区单独对应一个.ibd文件,文件名是 “表名+分区名”,也可以在创建表的时候指定分区的数据文件的位置,这样可以将表的IO均分到各个磁盘部分。要使用多表空间必须注意的是需要配置innodb_file_par_table,且重启才生效。

还有一点需要注意:即使使用了多表空间存储,但是共享表空间仍然是需要的,innoDB把内部数据词典和在线重做日志存储在共享空间中。

如何查看数据库的存储文件

存储文件一般存放在/var/lib/mysql/目录下,以数据库名划分子目录,如:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值