Mysql高级 | 【一】存储引擎和SQL的读取顺序
程序员文章站
2024-03-23 15:42:28
...
转载本文章请标明作者和出处
本文出自《Darwin的程序空间》
Mysql整体分层
- 连接层
- 与客户端进行连接的服务
- 主要完成一些类似连接的处理,授权认证及相关的安全方案
- 服务层
- 提供和新的服务功能
- 会对sql进行一些优化
- 所有跨存储引擎层的功能都在这一层
- 查询内存缓存的服务,提升系统性能
- 引擎层
- 真正负责Mysql的数据的存储和提取
- 不同的存储引擎提供不同的功能,可以根据自己的实际需求来选取
- 存储层
- 数据存储在计算机文件系统之上,并完成与存储引擎的交互
存储引擎
概念
- Mysql中的数据使用各种不同的技术存储在文件(或者内存中);
- 这些技术中每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力;
- 通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能;
- 这些不同的技术以及配套的相关功能在Mysql中被称之为存储引擎;
查看存储引擎
show ENGINES;
查看当前使用的存储引擎
show table status from JD(数据库名称) where name = "表名";
MyISAM和InnoDB的区别
- 主外键
- InnoDB支持
- MyISAM 不支持
- 事务
- InnoDB 支持
- MyISAM 不支持
- 行表锁
- InnoDB 行锁
- MyISAM 表锁
- 缓存
- InnoDB 索引和数据均缓存,对内存要求比较高,而且内存的大小有决定性的影响
- MyISAM 表锁
- 表空间
- InnoDB 小
- MyISAM 小
- 关注点
- InnoDB 事务
- MyISAM 性能
- 默认安装
- InnoDB 默认支持,并且新建表默认使用
- MyISAM 默认支持
- 文件结构
- InnoDB 事务
- b.frm:描述表结构的文件,字段长度类型等
- b.ibd:存储数据信息和索引信息
- MyISAM 性能
- b.frm:描述表结构的文件,字段长度类型等
- b.MYD:数据信息文件,存储数据信息文件
- b.MYI:索引信息文件
- InnoDB 事务
SQL读取的顺序
-
写sql的顺序和mysql执行sql的顺序:
平常我们写sql的时候顺序大概是这个样子的:
但是sql读取的时候顺序是这个样子的:
-
整体执行过程:
- 先对多表进行关系,然后再根据连接条件查找符合条件的记录
- 在符合条件的基础上再进行where条件筛选
- 对筛选出来的内容进行分组操作
- 分组完成之后使用having语句再次筛选出满足条件的记录
- 取所有满足条件的记录
- 对取出的记录进行排序
- 最终从取出的记录获取limit中指定的记录
上一篇: 最小费用最大流
推荐阅读