mysql 存储引擎java_MySQL学习笔记(7):存储引擎

本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。

和大多数数据库不同,插件式存储引擎是MySQL最重要的特性之一。

InnoDB

InnoDB表提供事务安全。

InnoDB表支持外键。创建外键时,要求父表必须有对应的索引,子表在创建外键时也会自动创建对应的索引。如父表被子表创建了外键索引,则父表的索引禁止被删除。在导入多个表的数据时,或在执行LOAD DATA或ALTER TABLE操作的时候,可以使用SET foreign_key_checks=0关闭外键检查。执行完后,使用SET foreign_key_checks=1重新打开。

InnoDB表自动增长列必需是索引,或组合索引的第一列。

InnoDB存储表和索引有以下两种方式:

使用共享表空间存储:表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件。

使用多表空间存储:表结构保存在.frm文件中,每个表的数据和索引单独保存在.ibd文件中。如果是分区表,则每个分区对应单独的.ibd文件,文件名为“表名+分区名”,可以在创建分区的时候指定每个分区的文件位置。共享表空间仍然是必须的,InnoDB把内部数据词典和在线重做日志放在共享表空间中。

使用参数innodb_file_per_table可指定是否使用多表空间存储,并在重启服务器后,只且只对新建的表生效。使用多表空间存储的表,不能直接复制.frm和.ibd文件进行恢复,因为没有共享表空间的数据字典信息。但如恢复表到原来的数据库,可使用ALTER TABLE tablename DISCARD TABLESPACE和ALTER TABLE tablename IMPORT TABLESPACE。

InnoDB表没有表元数据的缓存(如行数,因而执行COUNT(*)较慢)。

MyISAM

MyISAM表不支持事务,也不支持外键。

MyISAM表自动增长列可为组合索引的非第一列。

每个MyISAM在磁盘上存储成3个文件,数据文件和索引文件可以放置在不同的目录(需在创建表时通过DATA DIRECTORY和INDEX DIRECTORY指定)。其文件名和表名相同,扩展名分别是:

.frm:存储表定义。

.MYD:MYData,存储数据。

.MYI:MYIndex,存储索引。

MyISAM表支持3种不同的存储格式:

静态表:默认的存储格式,每条记录都是固定长度的。

动态表:记录不是固定长度的,包含变长字段。

压缩表:由myisampack工具创建,每条记录都被单独压缩。

MyISAM表有表元数据的缓存(如行数,因而执行COUNT(*)较快)。

MERGE

MERGE表是一组MyISAM表的组合,这些MyISAM表必须结构完全相同。MERGE表本身并没有数据,对其的任何操作实际上是对内部MyISAM表进行的。可以对MERGE表进行DROP操作,其只是删除表定义,对内部的表没有影响。

MERGE表在磁盘中保存两个文件,文件名以表名开始,.frm存储表定义,.MRG包含组合表的信息,包括MERGE表由哪些表组成、插入新数据时的依据。可以通过修改.MRG文件来修改MERGE表,但修改后需使用FLUSH TABLES刷新。

MEMORY

MEMORY表的数据放在内存中,每个MEMORY表只对应一个.frm磁盘文件。

在启动MySQL服务时使用--init-file选项,把INSERT INTO ... SELECT或LOAD DATA INFILE写入文件中,就可在服务启动时从持久稳固的数据源装载表。定义MEMORY表的时候可通过MAX_ROWS指定表的最大行数。

NDB

NDB存储引擎在MySQL Cluster中使用。

常用存储引擎对比

特点

InnoDB

MyISAM

MERGE

MEMORY

NDB

存储限制

64TB

没有

事务安全

支持

锁机制

行锁

表锁

表锁

表锁

行锁

B树索引

支持

支持

支持

支持

支持

哈希索引

支持

支持

全文索引

支持

集群索引

支持

数据缓存

支持

支持

支持

索引缓存

支持

支持

支持

支持

支持

数据可压缩

支持

空间使用

N/A

内存使用

中等

批量插入速度

支持外键

支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值