(开发篇):表类型(存储引擎)的选择

  MySQL存储引擎概述:插入式存储引擎是MySQL数据库最重要的特征之一,用户可以根据应用需要选择如何存储和索引数据、是否使用事务等。目的是为了适应不同领域数据库应用要求。

特征:
  • 使用不同存储引擎提高应用的的效率
  • 用户自我定制和使用自己的存储引擎。(灵活

这里面介绍四种常用的存储引擎:MyISAMInnoDBMEMORYMERGE.


MyISAM

MySQL默认的存储引擎。

特点

  • 不支持事务、外键
  • 访问速度快、对事务完整性没有要求,
  • 或者以SELECT、INSERT为主的应用基本上可以使用这个引擎来创建表。

存储位置和存储格式

每个MyISAM在磁盘上存储成3个文件,文件名都和表名一致,扩展名有区别:(其实就是划分数据文件和索引文件,平均分布IO,获取更快的速度)

  • .frm(存储表的定义)
  • .MYD(MyData,存储数据)
  • .MYI(MyIndex,存储索引)

存储格式:

  • 静态(固定长度)表
  • 动态表
  • 压缩表

该如何选择哪种存储格式呢?(每种的存储格式有什么好处?)下面就是分析:

静态表:默认存储结构。非变长字段。优点:存储非常迅速、容易缓存、出现故障容易修复

            缺点:占用的空间比动态表多

            注意问题:静态表存储时,补足空格,访问时不会得到空格。小心丢失尾部空格。

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

            优点:占用空间相对较小

            缺点:容易产生碎片,要定时执行OPTIMIZE TABLE语句或者myisamchk-r命令改善性能

压缩表:myisampack工具创建,占用非常小的磁盘空间。每个记录单独压缩,只有非常小的访问开支


Innodb

Innodb存储引擎提供了具有提交、回滚和崩溃回复能力的事务安全。对比MyISAM,Innodb写的处理效率差一些,并且会占更多的磁盘空间以保留数据和索引。

存储引擎为Innodb的表特点

1.自动增长列

  • Innodb表的自动增长列可以手工插入,但是插入的值如果是0或null,实际插入的将是自动增长后的值。
  • 强制设置自动增长列的初始值,默认为1,默认值保存在内存中。该值使用之前数据库重新启动,会在内存中丢失,需要在数据库启动后重新设置。
  • 自动增长列必须是索引。

2.外键约束

MySQL支持外键的存储引擎只有Innodb,在创建外键的时候,要求父表必须对应的索引,子表在创建外键的时候也会自动创建对应的索引。

父表和子表约束(创建索引时,指定在删除、更新父表时,对子表进行的相应操作):

RESTRICTNO ACTION

限制在子表有关联记录的情况下父表不能更新

CASCADE表示父类在更新或者删除时,更新或者删除除子类对应记录。小心数据丢

SET NULL:表示父表在更新或者或者删除的时候,子表的对应字段被SET NULL;小心数据丢

3.存储方式

存储表和索引:

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

MEMORY

MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件,格式是.frm。

MEMORY类型的表访问非常快,因为他的数据是放在内存中的,并且默认使用hash索引,但是一旦服务器关闭,表中的数据就会丢失。

MERGE

MERGE存储引擎是一组MyISAM表的组合,这些表必须具有相同的表结构,因为MERGE本身并没有数据,MERGE类型的表可以进行查询、更行、删除操作,实际是对内部的MyISAM表进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值