《深入浅出MySql》学习笔记(一存储引擎)

路漫漫其修远兮,吾将上线而求索。

《深入浅出MySql》学习笔记

最近在看《深入浅出MySql》,打算系统学习一下MySql数据库,做些许记录,权做学习笔记。

一、存储引擎概述

登录数据库以后使用show engines命令可以查看当前安装数据库所支持的存储引擎,笔者安装的数据库版本为5.7.28,使用命令后查询出9种存储引擎,但是有一种并不支持。如下图:
avatar

以上存储引擎用户可以根据应用的需要选择如何存储和索引数据,是否使用事务等。各个存储引擎主要不同之处如下表所示:

特点MyISAMInnoDBMEMORYMERGENDB
存储限制64TB没有
事务安全支持
锁机制表锁行锁表锁表锁行锁
B树索引支持支持支持支持支持
哈希索引支持支持
全文索引支持
集群索引支持
索引缓存支持支持支持支持支持
数据可压缩支持
空间使用N\A
内存使用中等
批量插入的速度
支持外键支持

二、MyISAM

MyISAM存储引擎并不支持事务与外键,但其优势为访问的速度快,对事务完整新没有要求或者以SELECT、INSERT为主的应用可以考虑使用MyISAM来创建数据库表。

(一)MyISAM数据存储

每个MyISAM表在磁盘上存储为三个文件,文件名与表明相同,分别为:
.frm(存储表定义)
.MYD(MYData,存储数据)
.MYI(MYIndex,存储索引)
另外为提升访问速度,可以在创建表的时候通过DATA DIRECTORYINDEX DIRECTORY语句指定数据文件和索引文件放在不同的目录,以平均分布IO。

(二)数据存储格式

MyISAM有三种数据存储格式,分别为:
静态(固定长度)表
字段均为非变长字段,每个记录均为固定长度,存储迅速,容易缓存,出现故障容易恢复,但是占用空间比动态表多。**静态表的数据存储会按照列的宽度定义补足空格,然后在访问数据时会去掉空格,且原有数据右侧存在空格时也会去掉!
动态表
动态表包含变长字段,占用空间较少,但是频繁的更新和删除记录会产生碎片,需定期执行OPTIMIZE TABLE语句或myisamchk-r命令来改善性能,且出现故障时相对比较困难
压缩表
压缩表只能由myisampack工具创建,占据空间小,访问开支小。

三、InnoDB

InnoDB存储引擎具有提交、回滚、崩溃恢复的食物安全。但是对比MyISAM,InnoDB写入数据效率差一些,并且会占用更多的磁盘空间以保留数据和索引。

(一)自动增长列

使用较多,不在赘述。需要注意的是指定自动增长的初始值时,对应的初始值保存在内存中,该值使用之前重启数据库的话会丢失。

(二)外键约束

在创建索引时,可以指定在删除、更新父表时对子表进行的相应操作,包括RESTRICT、CASCADE、SET NULL、NO ACTION。RESTRICT和NO ACTION相同,指限制在子表有关联记录的情况下父表不能更新;CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录;SET NULL则表示父表在更新或者删除时,子表对应字段被SET NULL。选择后两种方式时应谨慎,防止数据丢失。
SET FOREIGN_KEY_CHECKS = 0或者1可以关闭和打开外键约束。

(三)存储方式

InnoDB
·共享表空间存储
表结构存储在.frm文件中,数据和索引存储在innodb_data_home_dir和innodb_data_file_path定义的表空间种,可以是多个文件。
·多表空间存储
表结构存储在.frm文件中,但是每个表的数据和索引单独保存在.ibd文件中,如果是个分区表,则每个分区对应单独的.ibd文件,文件名为“表名+分区名”,可在创建分区时指定每个分区的数据文件的位置,以此来将表的IO均匀分布在多个磁盘上。
多表空间的数据文件没有大小限制,不需设置初始大小,也不需设置文件的最大限制,扩展大小等参数。

四、MEMORY

MEMORY存储引擎使用存在于内存中的内容来创建表,每个MEMORY表只实际对应一个磁盘文件,格式为.frm。由于存在于内存中,所以其访问非常快,且默认使用HASH索引,但是一旦服务关闭,则数据就会丢失。

五、MERGE

MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,其本身没有数据,对MERGE类型的表可以进行查询、更新、删除操作,其实际上是对内部的MyISAM表进行的,对MERGE表进行的DROP操作也只是删除MERGE的定义,对其内部数据没有影响。
MERGE表在磁盘上保留两个文件,.frm存储表的定义,.MRG存储表文件包含组合表的信息,包括MERGE表由哪些表组成、插入新的数据时的依据等。
对MERGE表的插入操作,是通过INSERT_METHOD字句定义插入的表,有三个不同的值,可以使用FIRST、LAST使得被插入的值作用在第一或者最后一个表上,不定义或者定义为NO,则表示对MERGE表不能进行插入操作。
例如:
avatar


OVER



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值