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) - 应用场景:只读应用或者以读为主的业务
 
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/16725425.html
                    
                
                
            
        
浙公网安备 33010602011771号