mysql之存储引擎

存储引擎

mysql中的存储引擎的概念:存储引擎就是指表的类型。其实以前叫做表处理器,后来才改名叫做存储引擎,它的功能就是接受上层传下来的指令,然后对表中数据进行提取或者写入操作。
也有说是不同的数据在物理磁盘上的不同的组织形式。

数据存储位置

show variables like 'datadir';

  • 数据库a 表b
    如果表b采用InnoDB,data\a中会产生1个或者2个文件:
    b.frm:描述表结构,字段长度等。
    如果采用系统表空间模式,数据信息和索引信息会存储在ibdata1中。
    如果采用独立表空间存储模式,data\a中会产生b.idb文件(存储数据信息和索引信息)
    注意:mysql5.7中会在data\a的目录下生成db.opt文件用于保存数据库的相关配置。比如:字符集、比较规则。而mysql8.0不再提供db.opt文件。
    mysql8.0中不再单独提供b.frm,而是合并在b.idb文件中。

  • 如果表b采用MYISAM,data\a中会产生3个文件:
    mysql5.7中:b.frm:描述表结构文件,字段长度等。mysql8.0中b.xxx.sdi:描述表结构文件,字段长度等。
    b.MYD:数据逆袭文件,存储数据信息(比如采用独立表存储模式)
    b.MYI:存放索引信息文件

查看存储引擎

show engines;
show engines \G;

  • Engine参数:表示存储引擎名称
  • Support:表示Mysql数据库管理系统是否支持该引擎,Yea表示支持,no不支持
  • DEFAULT:表示系统默认支持的存储引擎
  • Comment:表示对存储引擎的评论
  • Transaction:表示存储引擎是否支持事务:yes表示支持,no表示不支持。
  • XA:表示存储引擎所支持的分布式是否符合XA规范:YES表示支持,NO表示不支持。代表着该存储引擎是否支持分布式事务。
  • Savepoints:表示存储引擎是否支持事务处理的保存点:yea表示支持,no表示不支持。也就是说,该存储引擎是否支持部分事务回滚。

设置系统默认的存储引擎

show variables like '%storage_engine%'; 
#或
SELECT @@default_storage_engine;

修改默认的存储引擎

如果在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用 InnoDB 作为表的存储引擎。
如果我们想改变表的默认存储引擎的话,可以这样写启动服务器的命令行:

SET DEFAULT_STORAGE_ENGINE=MyISAM;

或者修改 my.cnf 文件:

default-storage-engine=MyISAM 
# 重启服务 
systemctl restart mysqld.service

设置表的存储引擎

存储引擎是负责对表中的数据进行提取和写入工作的,我们可以为 不同的表设置不同的存储引擎 ,也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式。

创建表时指定存储引擎

我们之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎 InnoDB 。如果我们想显式的指定一下表的存储引擎,那可以这么写:

CREATE TABLE 表名( 建表语句; ) ENGINE = 存储引擎名称;

修改表的存储引擎

如果表已经建好了,我们也可以使用下边这个语句来修改表的存储引擎:

ALTER TABLE 表名 ENGINE = 存储引擎名称;

引擎介绍

1.InnoDB:具备外键支持功能的事务存储引擎。

  • MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 。
  • InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
  • 除了频繁增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。
  • 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
  • 数据文件结构:(在《第02章_MySQL数据目录》章节已讲)
    表名.frm 存储表结构(MySQL8.0时,合并在表名.ibd中)
    表名.ibd 存储数据和索引
  • InnoDB是 为处理巨大数据量的最大性能设计 。
  • 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。比如: .frm , .par , .trn , .isl , .db.opt 等都在MySQL8.0中不存在了。
  • 对比MyISAM的存储引擎, InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。
  • MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据, 对内存要求较 高 ,而且内存大小对性能有决定性的影响。

4.2 MyISAM 引擎:主要的非事务处理存储引擎 MyISAM提供了大量的特性,

  • 包括全文索引、压缩、空间函数(GIS)等,但MyISAM 不支持事务、行级 锁、外键 ,有一个毫无疑问的缺陷就是 崩溃后无法安全恢复 。
  • 5.5之前默认的存储引擎
  • 优势是访问的 速度快 ,对事务完整性没有要求或者以SELECT、INSERT为主的应用
  • 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高
  • 数据文件结构:(在《第02章_MySQL数据目录》章节已讲)
  • 表名.frm 存储表结构
    表名.MYD 存储数据 (MYData)
    表名.MYI 存储索引 (MYIndex)
  • 应用场景:只读应用或者以读为主的业务
posted @ 2022-09-24 12:58  King-DA  阅读(58)  评论(0)    收藏  举报