共计 1643 个字符,预计需要花费 5 分钟才能阅读完成。
介绍
在上一篇文章 mysql 总体概述 里咱们大略理解了 mysql 的架构设计,其中提到了 存储引擎。它在 mysql 里是一个十分重要的角色,负责了数据的创立、读取和更新,也就是数据的 I/O 操作。
最重要的是,它是 可插拔 的模块,这意味着咱们在切换存储引擎时,对于下层利用来讲,是不须要做任何适配的。
存储引擎有很多种,而且都有属于本人的个性,像咱们常见的 InnoDB 有事务反对、MyISAM 速度较快等。
存储引擎的用法
作为插件化的模块,咱们能够很天然的增加、卸载存储引擎,并且在创立表时指定存储引擎。
加载存储引擎
mysql 通过曾经定义好的 API 接口与存储引擎通信,所以咱们只有实现对应的 API 接口,就能够在 mysql 运行时加载进来。
在 mysql 源码里有一个 example 的存储引擎,咱们能够看到它须要实现的 API 接口如下:
当咱们实现了这些办法后,就能够把它编译为共享库,而后应用上面的语句加载进来了
INSTALL PLUGIN example SONAME 'example.so';
须要留神的是,插件文件必须位于 mysql 插件目录中,并且领有对 plugin 表的 INSERT 权限。
卸载存储引擎
要卸载存储引擎,就比较简单了
UNINSTALL PLUGIN example;
当卸载后,对应的表将 不可拜访,所以肯定要留神是否还有该存储引擎的表在应用!
查看并应用存储引擎
当咱们加载了存储引擎后,能够应用上面的命令来查看:
show engines;
如果咱们想要应用对应的存储引擎时,能够应用上面的办法:
- 创立表时指定:CREATE TABLE t1 (id INT) ENGINE = INNODB;
- 设置默认应用:SET default_storage_engine=INNODB;
- 批改表时指定:ALTER TABLE t ENGINE = InnoDB;
其中 ALTER TABLE
将会把旧表复制到新的表,并且在此期间都会加锁应用,要特地留神。
存储引擎的品种特点
在 mysql 里实现了很多种的存储引擎,每种存储引擎都有属于它们的特色。咱们来看看 mysql 里反对的存储引擎有哪些吧。
InnoDB
:它是 mysql 的默认存储引擎,可能实现 ACID 个性的事务,并且能提交、回滚、复原数据,能很好的保障用户数据。同时反对了行级锁、汇集索引以及外键束缚,是一个欠缺的存储引擎。
MyISAM
:是 mysql 最开始的存储引擎,占用空间小,能疾速存储,但不反对事务,提供了基于表级别的锁粒度,实用于配置或只读性能的应用程序。
Memory
:数据都是存在内存里的,能提供快速访问,不过应该较少人应用,毕竟一旦断电数据也就失落了。
CSV
:带有逗号分隔值的文本文件,没有索引存在。然而兼容性很好,能够跟其余的程序替换数据。
其余存储引擎应用较少,就不再提及了,
存储引擎的差别点
存储引擎都有属于本人的个性,它们的差别点大抵上能够归纳如下:
并发性
:对锁的粒度操控不一样,有的提供了表锁,有的提供了行锁,甚至有的还提供了快照读。事务
:有的存储引擎反对,有的不反对,并不是每个程序的设计都须要事务,像日志这种流水数据就不须要了。参照完整性
:即是否反对外键,有了外键,则关联性强,在删除的时候会做关联查看。存储形式
:在表和索引的存储形式上不一样,像 MyISAM 会存储成三个文件,InnoDB 所有的表都保留在同一个数据文件中。索引反对
:有的是汇集索引,间接叶子节点上存放数据,有的在叶子节点只存了数据区域的指针。
总结
插件式的存储引擎为咱们带来了多种抉择,应用哪个存储引擎其实并没有指定的规定,只能是依照以后的需要剖析去抉择。像想要全文索引,能够抉择 MyISAM 或 InnoDB,想要数据完整性或者是事务反对,则须要抉择 InnoDB。
当然,很多时候咱们会间接的抉择默认的存储引擎 InnoDB,毕竟在面对随时都会改需要的互联网我的项目而言,大而全是咱们最好的抉择。
感兴趣的敌人能够搜一搜公众号「阅新技术」,关注更多的推送文章。
能够的话,就顺便点个赞、留个言、分享下,感激各位反对!
阅新技术,浏览更多的新常识。