MySQL学习-存储引擎(一)

85 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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不仅缓存索引还要缓存真实数据,对内存要求高,而且内存大小对性能有决定性的影响。