当前位置:网站首页>MySQL的存储引擎
MySQL的存储引擎
2022-07-06 09:10:00 【Eric-x】
前言
要想对SQL进行优化,那么对于存储引擎的了解是必不可少的。想着那就写一篇关于引擎的文章,对自己也算是一个回顾
文章目录
1、查看存储引擎
在了解存储引擎之前,我们肯定要知道MySQL给我们提供了哪些引擎,通过:show engines 查看
2、设置系统默认的存储引擎
我们可以先查看默认的存储引擎
show variables like '%storage_engine%';
#或
SELECT @@default_storage_engine;
我的MySQL版本的8.x,可以看到默认引擎是InnoDB
那如何修改默认的存储引擎呢?
如果是8.0及以上,那么在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用 InnoDB 作为表的存储引擎。
如果是5.x,我们想改变表的默认存储引擎的话,可以这样写启动服务器的命令行:
SET DEFAULT_STORAGE_ENGINE=MyISAM;
或者修改 my.cnf 文件:
default-storage-engine=MyISAM
# 重启服务
systemctl restart mysqld.service
3、设置表的存储引擎
存储引擎是负责对表中的数据进行提取和写入工作的,我们可以为 不同的表设置不同的存储引擎 ,也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式。
3.1、创建表时指定存储引擎
如果创建表的语句没有指定表的存储引擎,那就会使用默认的存储引擎 InnoDB 。如果我们想显式的指定一下表的存储引擎,那可以这么写:
CREATE TABLE 表名(
建表语句;
) ENGINE = 存储引擎名称;
3.2、修改表的存储引擎
如果表已经建好了,我们也可以使用下边这个语句来修改表的存储引擎:
ALTER TABLE 表名 ENGINE = 存储引擎名称;
比如我们修改一下 engine_demo_table 表的存储引擎:
ALTER TABLE engine_demo_table ENGINE = InnoDB;
4、引擎介绍
好,到了这里,因为是完全按照大家熟悉的SQL语句先对引擎认识一下,相信大家对于引擎已经有了一点点感觉,如果还没有感觉,没关系,接下来会只挑重点讲:
4.1、InnoDB 引擎:具备外键支持功能的事务存储引擎
MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 。
InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。
除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
数据文件结构:
(1)表名.frm 存储表结构
(2)表名.ibd 存储数据和索引对比MyISAM的存储引擎, InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。
MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据, 对内存要求较高 ,而且内存大小对性能有决定性的影响。
4.2、MyISAM 引擎:主要的非事务处理存储引擎
- MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM 不支持事务、行级锁、外键 ,有一个毫无疑问的缺陷就是 崩溃后无法安全恢复 。(这也是因为不支持事务导致的)
- MySQL5.5之前默认的存储引擎
- 优势是访问的 速度快 ,对事务完整性没有要求或者以SELECT、INSERT为主的应用
- 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高
- 数据文件结构:
(1)表名.frm 存储表结构
(2)表名.MYD 存储数据
(3)表名.MYI 存储索引 - 应用场景:只读应用或者以读为主的业务
4.3、Archive 引擎:用于数据存档
4.4、Memory 引擎:置于内存的表
概述:
Memory采用的逻辑介质是 内存 , 响应速度很快 ,但是当mysqld守护进程崩溃的时候 数据会丢失 。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。
主要特征:
- Memory同时 支持哈希(HASH)索引 和 B+树索引 。
- Memory表至少比MyISAM表要 快一个数量级 。(MylSAM比InnoDB要快,但是Memory还要比MylSAM快,因为是直接从内存中读取)
- MEMORY 表的大小是受到限制 的。表的大小主要取决于两个参数,分别是 max_rows 和max_heap_table_size 。其中,max_rows可以在创建表时指定;max_heap_table_size的大小默认为16MB,可以按需要进行扩大。
- 数据文件与索引文件分开存储
- 缺点:其数据易丢失,生命周期短。基于这个缺陷,选择MEMORY存储引擎时需要特别小心。
Memory存储引擎的使用场景:
- 目标数据比较小 ,而且非常 频繁的进行访问 ,在内存中存放数据,如果太大的数据会造成 内存溢出 。可以通过参数 max_heap_table_size 控制Memory表的大小,限制Memory表的最大的大小。
- 如果 数据是临时的 ,而且 必须立即可用 得到,那么就可以放在内存中。
- 存储在Memory表中的数据如果突然间 丢失的话也没有太大的关系 。
4.5、其他引擎
MySQL存储引擎还有:
- Blackhole 引擎:丢弃写操作,读操作会返回空内容
- CSV 引擎:存储数据时,以逗号分隔各个数据项
- Federated 引擎:访问远程表
- Merge引擎:管理多个MyISAM表构成的表集合
- NDB引擎:MySQL集群专用存储引擎
这些都不常用,但也列出一下,感兴趣的小伙伴可以单独去了解一下哦。
MyISAM和InnoDB的对比
MySQL5.5之前的默认存储引擎是MyISAM,5.5之后改为了InnoDB。
MySQL中同一个数据库,不同的表可以选择不同的存储引擎。而在实际场景中,用的最多的两个引擎就是MylSAM和InnoDB了。这里有一个点需要注意,并不是说InnoDB作为MySQL5.5之后的默认引擎就一定比MylSAM引擎要好,并不存在说InnoDB就是来替代MyISAM的,这两者更倾向于一个互补的关系。
对比项 | MylSAM | InnoDB |
---|---|---|
外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
自带系统表使用 | Y | N |
关注点 | 性能:节省资源、消耗少、适用于简单业务 | 事务、并发写、更大资源 |
默认安装 | Y | Y |
默认使用 | N | Y |
总结
如果有哪些写的不对的地方,望各位指出,感谢。
边栏推荐
- CANoe下载地址以及CAN Demo 16的下载与激活,并附录所有CANoe软件版本
- Contrôle de l'exécution du module d'essai par panneau dans Canoe (primaire)
- 宝塔的安装和flask项目部署
- Control the operation of the test module through the panel in canoe (primary)
- C#/. Net phase VI 01C Foundation_ 01: running environment, process of creating new C program, strict case sensitivity, meaning of class library
- 通过bat脚本配置系统环境变量
- Listen to my advice and learn according to this embedded curriculum content and curriculum system
- CDC: the outbreak of Listeria monocytogenes in the United States is related to ice cream products
- Several silly built-in functions about relative path / absolute path operation in CAPL script
- Teach you how to write the first MCU program hand in hand
猜你喜欢
CAPL 脚本打印函数 write ,writeEx ,writeLineEx ,writeToLog ,writeToLogEx ,writeDbgLevel 你真的分的清楚什么情况下用哪个吗?
Release of the sample chapter of "uncover the secrets of asp.net core 6 framework" [200 pages /5 chapters]
C杂讲 文件 初讲
The appearance is popular. Two JSON visualization tools are recommended for use with swagger. It's really fragrant
The replay block of canoe still needs to be combined with CAPL script to make it clear
Popularization of security knowledge - twelve moves to protect mobile phones from network attacks
[flask] crud addition and query operation of data
C miscellaneous lecture continued
Some thoughts on the study of 51 single chip microcomputer
jar运行报错no main manifest attribute
随机推荐
Carolyn Rosé博士的社交互通演讲记录
Can I learn PLC at the age of 33
Cooperative development in embedded -- function pointer
17 medical registration system_ [wechat Payment]
15 医疗挂号系统_【预约挂号】
美疾控中心:美国李斯特菌疫情暴发与冰激凌产品有关
Pointer learning
MySQL实战优化高手07 生产经验:如何对生产环境中的数据库进行360度无死角压测?
NLP路线和资源
Target detection -- yolov2 paper intensive reading
Random notes
MySQL實戰優化高手08 生產經驗:在數據庫的壓測過程中,如何360度無死角觀察機器性能?
If someone asks you about the consistency of database cache, send this article directly to him
四川云教和双师模式
The appearance is popular. Two JSON visualization tools are recommended for use with swagger. It's really fragrant
Regular expressions are actually very simple
寶塔的安裝和flask項目部署
Jar runs with error no main manifest attribute
学习单片机对社会的帮助是很大的
[NLP] bert4vec: a sentence vector generation tool based on pre training