MySQL(进阶—,存储引擎)
2023-12-14 12:39:18
MySQL(进阶—,存储引擎)
(进阶7部分:存储引擎,索引【核心】,SQL优化,视图/存储过程/触发器,锁,innoDB引擎,MySQL管理)
-
Mysql体系结构
- 连接层:处理客户端连接,处理认证,请求操作
- 服务层:sql接口,sql的解析,sql的优化(所有跨存储引擎的操作都是在服务层处理)
- 引擎层(可插拔式,index的实现层)
- 存储层(存储相关数据,数据索引,文件和日志)
-
存储引擎简介
-
存储引擎特点
兼顾高可靠性和高性能的通用存储引擎,在mysql5.5之后,innoDB时mysql的默认存储引擎。
-- 查看当前数据库支持的数据引擎 SHOW ENGINES; -- 创建表的时候指定存储引擎 create table xxx(......) engine = iniodb;
-
innoDB的特点:
- DML(数据增删改)操作遵循ACID(原子性,隔离性,一致性,持久)模型,支持事务
- 行级锁,提高并发性访问性能
- 支持外键FOREIGN KEY约束,保证数据的完整性和正确性
-
文件
-
xxx.ibd(innoDB引擎的每一张表都对应这一个表空间文件)存储该表的表结构(frm,sdi),数据和索引。
-
参数:innodb_file_per_table(mysql8.0默认打开,标识每一张表都对应一个表空间文件)
-- 查看表空间文件的开关 show variables like 'innodb_file_table';
- mysql数据存放目录:
C:\ProgramData\MySQL\MySQL Server 8.0\Data
存放当前数据库的表结构,当前数据库中存放的数据,索引,此文件为二进制,不可以直接查看查看方式:ibd2sdi account.ibd
-
-
innoDB的逻辑存储结构
- TableSpece:表空间,如ibd文件,包含若干个segment
- Segment:段,包含若干个Extent
- Extent:区,包含若干个page,区大小固定(1M可以包含16个page)
- Page:页,包含若干个Row(磁盘操作的最小单元)页大小固定(16K)
- Row:行,包含trxId,roll point,col1,col2,…
MyISAM是mysql早期的默认存储引擎。
- MyISAM的特点
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
- 文件
- .MYD 数据
- .MYI 索引
- .sdi 表结构(文本文件json格式)
Memory存储引擎,数据存储到内存中,由于受到硬件影响,或者断电的影响,只能将这些表作为临时表或缓存使用
-
Memory的特点:
- 内存存放
- hash索引(默认)
-
文件
.sdi存储表结构(因为数据都存放在内存)
-
三种存储引擎的区别:
特点 InnoDB MyISAM Memory 存储限制 64TB 有 有 事务安全 支持 - - 锁机制 行锁 表锁 表锁 B+tree索引 支持 支持 支持 Hash索引 - - 支持 全文检索 支持(5.6版本之后) 支持 - 空间使用 高 低 N/A 内存使用 高 低 中等 批量插入速度 低 高 高 支持外键 支持 - - -
-
存储引擎应用
根据应用系统的特点选择合适的存储引擎。对复杂的系统,还可以根据实际情况选择多种存储引擎进行组合。
- innoDB:支持事务,外键,行锁。对事务的完整性和并发场景一致性有要求。
- MyISAM:以数据读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性,并发性不是很高,那么此存储引擎是合适的。如日志操作,电商的足迹和评论(非核心数据)。(MongoDB)
- Memory:保存在内存中,访问速度快,长用作临时表及缓存。缺陷是对表的大小由限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。(Redis)
文章来源:https://blog.csdn.net/weixin_52154534/article/details/134992233
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!