一、前言
二、MySQL逻辑架构
三、如何控制高并发的读写?
1.读写锁
2.锁策略
2.1 表级锁table lock)
ALTER TABLE
之类的语句就使用了表级锁,而忽略存储引擎的锁机制。
2.2 行级锁(row lock)
四、MySQL存储引擎是怎样的?
schema
)保存为数据目录data下的一个子目录。创建表时,MySQL会在数据库data目录下创建一个和表同名的
.frm
文件来保存表的定义。
show table status like '表名' \G
命令来查看表的存储引擎以及表的其他相关信息,例如,查看mysql数据库中的user表:
mysql> use mysql;
No connection. Trying to reconnect...
Connection id: 20587
Current database: *** NONE ***
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show table status like 'user' \G;
*************************** 1. row ***************************
Name: user
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 3
Avg_row_length: 125
Data_length: 512
Max_data_length: 281474976710655
Index_length: 4096
Data_free: 136
Auto_increment: NULL
Create_time: 2019-07-12 14:45:17
Update_time: 2019-12-20 15:55:44
Check_time: NULL
Collation: utf8_bin
Checksum: NULL
Create_options:
Comment: Users and global privileges
1 row in set (0.00 sec)
ERROR:
No query specified复制
Engine
字段可以表明,user表的存储引擎类型为
MyISAM
,其他字段在此就不一一说明,如想详细了解可查阅相关文档。
show engines
命令查看。我使用的MySQL版本为
5.7.25
,查看结果如下图所示:
InnoDB
、
Mrg_Myisam
、
Memory
、
Blackhole
、
MyISAM
、
CSV
、
Archive
、
Performance_Schema
、
Federated
,其中也做了简单的解释说明。
InnoDB
、
MyISAM
两种最常见的存储引擎进行着重说明,其它存储引擎只做简单说明,详细可查阅官方文档。
1.InnoDB存储引擎
InnoDB
是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎,并且有行级锁定和外键约束。
InnoDB
引擎。
InnoDB
的适用场景/特性,有以下几种:
经常更新的表,适合处理多重并发的更新请求。 支持事务。 可以从灾难中恢复(通过bin-log日志等)。 外键约束。只有他支持外键。 支持自动增加列属性auto_increment。
2.MyISAM存储引擎
MyISAM
提供了大量的特性,包括全文检索、压缩等,但不支持事务和行级锁,支持表级锁。对于只读的数据,或者表较小、可以忍受修复操作的场景,依然可以使用MyISAM。
MyISAM
的适用场景/特性,有以下几种:
不支持事务的设计,但是并不代表着有事务操作的项目不能用 MyISAM
存储引擎,完全可以在程序层进行根据自己的业务需求进行相应的控制。不支持外键的表设计。 查询速度很快,如果数据库 insert
和update
的操作比较多的话比较适用。整天 对表进行加锁的场景。 MyISAM
极度强调快速读取操作。MyIASM
中存储了表的行数,于是SELECT COUNT(*) FROM TABLE
时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM
也是很好的选择。
3.MySQL内建的其他存储引擎
3.1 Archive存储引擎
Archive
引擎只支持
insert
和
select
操作,并且在MySQL 5.1之前连索引都不支持。
Archive
引擎会缓存所有的写并利用zlib对插入的行进行压缩,所以比
MyISAM
引擎的磁盘I/O更少。但是每次
select
查询都需要进行全表扫描,所以Archive更适合日志和数据采集类应用,况且这类应用在做数据分析时往往需要全表扫描。
Archive
引擎支持行级锁和专用的缓冲区,所以可以实现高并发的插入。在一个查询开始直到返回表中存在的所有行之前,
Archive
引擎会阻止其他的
select
执行,以实现一致性读。另外,这也实现了批量插入在完成之前对读操作是不看见的。
3.2 Blackhole存储引擎
Blackhole
引擎没有实现任何的存储机制,它会丢失所有插入的数据,不做任何保存。怪哉,岂不是一无用处?
Blackhole
的日志,所以可以用于复制数据到备库,或者只是简单地记录到日志。这种特殊的存储引擎可以在一些特殊的复制架构和日志审核时发挥作用。
3.3 CSV存储引擎
CSV
引擎可以将普通的
CSV
文件作为MySQL的表来处理,但这种表不支持索引。
CSV
引擎可以在数据库运行时拷入或者拷出文件,可以将Excel等电子表格软件中的数据存储为
CSV
文件,然后复制到MySQL数据目录下,就能在MySQL中打开使用。同样,如果将数据写入到一个
CSV
引擎表中,其他的外部程序也能立即从表的数据文件中读取
CSV
格式的数据。
CSV
引擎可以作为一种数据交换的机制,是非常有用的。
3.4 Memory存储引擎
Memory
引擎是非常有用的。
Memory
引擎至少比
MyISAM
引擎要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘I/O。
Memory
引擎的表结构在重启以后还会保留,但数据会丢失。
Memory
引擎在很多场景下可以发挥很好的作用:
用于查找或者映射表,例如将邮箱和州名映射的表。 用于缓存周期性聚合数据的结果。 用于保存数据分析中产生的中间数据。
Memory
引擎支持Hash索引,因此查找非常快。虽然
Memory
的速度非常快,但还是无法取代传统的基于磁盘的表。
Memory
引擎是表级锁,因此并发吸入的性能较低。
Memory
的限制,或者含有
BLOB
或
TEXT
字段,则临时表会转换成
MyISAM
的引擎。
看了上面的说明,大家就会经常混淆Memory和临时表了。临时表是指使用 CREATE TEMPORARY TABLE
语句创建的表,它可以使用任何存储引擎,因此和Memory不是一回事。临时表只在单个连接中可见,当连接断开时,临时表也将不复存在。
4.如何选择合适的存储引擎呢
InnoDB
,并且这也是最正确的选择,所以Oracle在MySQL 5.5版本时终于将
InnoDB
作为默认的存储引擎了。
InnoDB
加上
Sphinx
的组合,而不是使用支持全文检索的
MyISAM
。当然,如果不需要用到
InnoDB
的特性,同时其他引擎的特性能够更好地满足需求,就可以考虑一下其他存储引擎。
事务 备份 恢复 特有的特性
参考文章:
https://www.cnblogs.com/sunsky303/p/8274586.html
https://www.cnblogs.com/coderyuhui/p/10773143.html
喜欢就点个"在看"呗,留言、转发朋友圈
文章转载自程序猿技术大咖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3372次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
912次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
541次阅读
2025-04-17 17:02:24
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
362次阅读
2025-04-30 17:37:37
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
305次阅读
2025-04-28 11:01:25
SQL优化 - explain查看SQL执行计划(下)
金同学
302次阅读
2025-05-06 14:40:00
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
294次阅读
2025-04-30 12:17:54
MySQL 官方准备了 3 个月的羊毛,万万没想到 8 天就被薅秃了,看看JieKeXu怎么说?
青年数据库学习互助会
278次阅读
2025-05-09 10:07:42
MySQL 8.4 新特性深度解析:功能增强、废弃项与移除项全指南
JiekeXu
252次阅读
2025-04-18 20:21:32
4月“墨力原创作者计划”获奖名单公布!
墨天轮编辑部
208次阅读
2025-05-13 16:21:59