持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
前言
上篇我们学习了MySQL中的缓存池。有兴趣的小伙伴可以阅读(MySQL学习-缓存池)。
下面我们继续学习MySQL中的存储引擎。
存储引擎
查看MySQL的存储引擎。
show engines;
Engine |
---|
PERFORMANCE_SCHEMA |
MRG_MYISAM |
CSV |
BLACKHOLE |
MEMORY |
InnoDB |
ARCHIVE |
MyISAM |
FEDERATED |
设置系统默认的存储引擎
查看默认的系统存储引擎:
show variables '%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 = 存储引擎名称;
引擎说明
InnoDB引擎
InnoDB引擎是具备外键支持功能的事务存储引擎。
- MySQL从5.5版本之后,默认采用InnoDB引擎。
- InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期事务。可以确保事务的完整提交和回滚。
- 除了增加和查询外,还需要更新删除操作,那么,应优先选择InnoDB存储引擎。
- 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
- 数据文件结构:
- 表名.frm存储表结构
- 表名.ibd存储数据和索引
- InnoDB是为处理巨大数据量的最大性能设计。
- 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。
- 对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
- MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求高,而且内存大小对性能有决定性的影响。