Skip to content

基础

MySQL 基础架构

基础架构

  1. 连接层
  2. 服务层
  3. 引擎层
  4. 存储层

SQL 类型

DML

data manipulation language

SELECT UPDATE INSERT DELETE

DDL

data definition language

CREATE ALTER DROP

DCL

Data Control Language

grant deny revoke

SQL执行流程

mysql分为server层与存储引擎层,server层包含连接器、分析器、优化器、执行器。

接下来以一条sql查询语句执行过程介绍各个部分功能。客户端执行一条sql:

  1. 首先由连接器进行身份验证,权限管理
  2. 若开启了缓存,会检查缓存是否有该sql对应结果(缓存存储形式key-vlaue,key是执行的sql,value是对应的值)若开启缓存又有该sql的映射,将结果直接返回;
  3. 分析器进行词法语法分析
  4. 优化器会生成执行计划、选择索引等操作,选取最优执行方案
  5. 然后来到执行器,打开表调用存储引擎接口,逐行判断是否满足查询条件,满足放到结果集,最终返回给客户端;若用到索引,筛选行也会根据索引筛选。

执行流程

存储引擎

  1. 查看数据库引擎
shell
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
  1. 查看系统默认存储引擎
  2. 对比
对比项MyISAMInnoDB
主外键NOYES
事务NOYES
行表锁表锁,不适合高并发行锁,操作时只锁某一行,适合高并发
缓存只缓存索引,不缓存真实数据不仅缓存索引还缓存真实数据,对内存要求比较高,而且内存大小对性能有决定性影响
表空间
关注点性能事务
默认安装YESYES

SQL执行加载顺序

sql
select * from  tb where a=1;

先 from 在 on join,在 where group by,最后进行 select ,然后 order by limit

执行器加载顺序

范式

第一范式:字段具有原子性,不可再分(字段单一职责)

第二范式:满足第一范式,每行应该被唯一区分,加一列存放每行的唯一标识符,称为主键(都要依赖主键)

第三范式:满足一二范式,且一个表不能包含其他表已存在的非主键信息(不间接依赖-不存在其他表的非主键信息)

范式优点与缺点:

优点:范式化,重复冗余数据少,更新快,修改少,查询时更少的distinct

缺点:因为一个表不存在冗余重复数据,查询可能造成很多关联,效率变低,可能使一些索引策略无效,范式化将列存在不同表中,这些列若在同一个表中可以是一个索引

两阶段提交