Mysql笔记(一)架构介绍

逻辑架构

逻辑架构图

Mysql笔记(一)架构介绍_第1张图片

  1. 连接器(Connectors)
  2. 系统管理和控制工具(Management Serveices & Utilities)
  3. 连接池(Connection Pool)
    SQL Layer MySQL业务层
  4. SQL接口(SQL Interface)
    接收SQL DML DDL语句
  5. 解析器(Parser)
    例如:select * from t1
    词法分析分词 =====>>>形成语法树
    语法分析分析 (符合SQL的语法 SQL的语法 SQL 92; limit是MYSQL自己的语法)
    例如(elect * from t1) 在此阶段被验证语法错误 sytnx error …
    最后形成正确语法树
  6. 查询优化器(Optimizer)
    Mysql 会觉得你写的SQL 不是完美的,所以会进行SQL优化,具体优化什么呢?
    例:
    多索引时 只使用一个最优的,可通过explain查看
    多表关联 小表驱动大表
    where 从左到右执行,但 MySQL 会优化寻找过滤力度最大的先执行
    如:where sex=‘男’ and id=1,会被优化为 where id=1 and sex=‘男’
    Oracle where条件是从右到左
  7. 查询缓存(Cache和Buffer)
    把查询结果存起来
    select * from tuser where id=1
    Map结构缓存其中Key值为DQL语句的hash值
    hash(select语句) 查询结果
    1、sql有变化,hash值不等则无法获取缓存结果
    2、缓存对应的表数据有变化,缓存清除
    MySQL8.0后不再使用
  8. 存储引擎(Pluggable Storage Engines)
    如:
    creat table xxx() engine=InnoDB/Memory/MyISAM
    MySQL的存储引擎是针对表进行指定的。(engine=InnoDB\myisam)
存储引擎 说明
MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行锁、支持3种不同的存储格式。包括静态型、动态型和压缩型
InnoDB 5.5版本后MySQL的默认数据库,支持事务和行级锁定,事务处理、回滚、崩溃修复能力多版本并发控制的事务安全,比MyISAM处理速度稍慢、支持外键(FOREIGN KEY)
ISAM MyISAM的前身,MySQL5.0以后不再默认安装
MRG_MyISAM(MERGE) 将多个表联合成一个表使用,在超大规模数据存储时很有用
Memory 内存存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失
Falcon 一种新的存储引擎,支持事物处理,传言可能是InnoDB的替代者
Archive 将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作
CSV CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换)

xtraDB存储引擎是由Percona公司提供的存储引擎,该公司还出品了Percona Server这个产品,它是基
于MySQL开源代码进行修改之后的产品。
阿里对于Percona Server服务器进行修改,衍生了自己的数据库(alisql)。

InnoDB和MyISAM存储引擎区别:

Innodb Myisam
存储文件 .frm 表定义文件 .ibd 数据文件和索引文件 .frm 表定义文件 .myd 数据文件 .myi 索引文件
表锁、行锁 表锁
事务 支持 不支持
CRUD 读、写 读多
COUNT 扫表 单独存储总数(Where也扫表)
索引结构 B+Tree B+Tree
外键 支持 不支持

存储引擎的选型:
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚
(rollback)。
MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择
MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,不需要持久保存,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择
InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询
的临时表,可以选择MEMORY存储引擎。

详细执行流程图
Mysql笔记(一)架构介绍_第2张图片

物理结构

  • MySQL是通过文件系统对数据和索引进行存储的。
  • MySQL从物理结构上可以分为日志文件数据索引文件
  • MySQL在Linux中的数据索引文件和日志文件都在/var/lib/mysql目录下。
  • 日志文件采用顺序IO方式存储、数据文件采用随机IO方式存储。
记录 优点 缺点
顺序IO 首地址、偏移量 记录速度快、只能追加 浪费空间
随机IO 地址 节省空间 相对较慢
日志文件

错误日志(errorlog)
默认是开启的,而且从5.5.7以后无法关闭错误日志,错误日志记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息

二进制日志(bin log)
记录数据变化,binlog记录了数据库所有的DDL语句和DML语句,但不包括select语句内容,语句以事件的形式保存,描述了数据的变更顺序,binlog还包括了每个更新语句的执行时间信息。如果是DDL语句,则直接记录到binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中,一般在生产中开启。
用于数据备份、恢复、主从

通用查询日志(general query log)
记录所有SQL,比较耗性能,建议生产中不开启

慢查询日志(slow query log)
SQL调优 定位慢的 select

默认是关闭的。
需要通过以下设置进行开启:

#开启慢查询日志
slow_query_log=ON
#慢查询的阈值
long_query_time=3
#日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不
是绝对路径名,文件则写入数据目录。
slow_query_log_file=file_name

记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句

重做日志(redo log)

回滚日志(undo log)

中继日志(relay log)

查看日志开启情况:

show variables like ‘log_%’;

数据文件

show variables like’%datadir%’;

InnoDB数据文件:

  • .frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息
  • .ibd:使用独享表空间存储表数据和索引信息,一张表对应一个ibd文件。
  • ibdata文件:使用共享表空间存储表数据和索引信息,所有表共同使用一个或者多个ibdata文
    件。

MyIsam数据文件:

  • .frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息
  • .myd文件:主要用来存储表数据信息。
  • .myi文件:主要用来存储表数据文件中任何索引的数据树

你可能感兴趣的:(Mysql)