Mysql体系结构

1.Mysql基本结构体系

MySql从概念上分为四层:

  • 网络连接层
  • 服务层(核心层)
  • 存储引擎层
  • 系统文件层

1.1网络连接层

接入方 支持协议很多。主要负责连接管理、授权认证、安全等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是MySQL所特有的技术。

1.2服务层

服务层是MySQL的核心,MySQL的核心服务层都在这一层,查询缓存查询解析SQL执行计划分析SQL执行计划优化。以及跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。通过下图来观察服务层的内部结构:

在这里插入图片描述

Sql语句的执行过程

查询缓存

在解析查询之前,服务器会检查查询缓存,如果能找到对应的查询,服务器不必进行查询解析、优化和执行的过程,直接返回缓存中的结果集。

解析器与预处理

MySQL会解析查询(解析器是由Lex和YACC实现的,参考资料)并创建了一个内部数据结构(解析树)。这个过程解析器主要通过语法规则来验证和解析。比如SQL中是否使用了错误的关键字或者关键字的顺序是否正确等等。预处理会根据MySQL的规则进一步检查解析树是否合法。比如要查询的数据表和数据列是否存在,也会检查当前连接的用户是否具有相关数据的访问权限等。

查询优化器

优化器将其转化成查询计划。多数情况下,一条查询可以有很多种执行方式,最后都返回相应的结果。优化器的作用就是找到这其中最好的执行计划。优化器并不关心使用的什么存储引擎,但是存储引擎对优化查询是有影响的。优化器要求存储引擎提供容量或某个具体操作的开销信息来评估执行时间。

查询引擎

在完成解析和优化阶段以后,MySQL会生成对应的执行计划,查询执行引擎根据执行计划给出的指令调用存储引擎的接口得出结果。

1.3存储引擎

后面单独介绍

1.4文件系统

该层主要是将数据库的数据存储在文件系统之上,并完成与存储引擎的交互。 同时还包括日志(redo,undo)、索引、错误日志、查询记录、慢查询等

关于InnoDB存储引擎,其数据文件的格式除了.ibd外,还有.ibdata格式,两者的主要区别是.bd是以 独享表空间的方式来存储数据,每个表一个ibd文件,.ibdata是以共享表空间的方式来存储数据,所有的表共同使用一个ibdata文件,即所有的数据文件都存在一个文件中 。可以通过 innodb_file_per_table参数来配置使用哪种方式来存储innoDB殷勤数据。

InnoDB默认使用的是独享表的存储方式,这种方式的好处是当数据库产生大量文件碎片的时,整理磁盘碎片对线上运行环境的影响较小

2.MySql存储引擎

可以通过如下命令查看当前mysql支持的存储引擎有哪些

mysql> show engines\G
*************************** 1. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
...

*************************** 7. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 8. row ***************************

可以看到InnoDB是mysql的默认存储引擎

  1. Myisam

    特点

    Mysql5.5版本之前的默认存储引擎,较多的系统表也还是使用这个存储引擎,系统临时表也会用到Myisam存储引擎

    • select count(*) from table 不需要进行数据的扫描
    • 数据(MYD)和索引(MYI)分开存储
    • 表级锁
    • 不支持事务
  2. Innodb

    从MySQL5.5.8开始,InnoDB存储引擎是默认的存储引擎。

    • 支持事务(ACID)
    • 行级锁
    • 以聚集索引(主键索引)方式进行数据存储
    • 支持外键
  3. NDB

  4. CSV

    文件大小很小,数据间以逗号隔开,可以直接通过文本编辑器来编辑csv数据文件,然后flush完成保存刷新,比如flush table XXX,数据安全性低

    应用场景

    • 数据的快速导入导出
    • 表格直接转换成csv
  5. Falcon

  6. Memory

    数据都存储在内存中,IO效率要比其他引擎高很多,服务器重启数据会丢失,内存数据表默认只有16M

    特点

    • 支持hash索引,B Tree索引,默认hash(查找复杂度0(1)),

    • 字段长度是固定长度 varchar(32)=char(32)

    • 不支持大数据类型存储,如blog,text

    • 表级锁

    应用场景

    • 等值查找热度较高数据

    • 查询结果内存中的计算,大多数都是采用这种存储引擎作为临时表存储需要计算的数据

  7. Archive

    压缩协议进行数据的存储,数据存储为ARZ格式的文件

    特点

    • 只支持insert 和 search 两种操作
    • 只允许自增ID列建立索引
    • 行级锁
    • 不支持事务
    • 数据占用磁盘少

    应用场景

    1. 日志系统
    2. 大量的数据采集
    3. 可以作为数据备份的选择(因为查询效率没有Innodb高,所以不适和作为实际运行数据库)
  8. Merge

  9. Faderated

    Uer defined

Innodb和Mysiam的对比

对比项InnodbMysiam
存储文件.frm 表定义文件
.idb 数据文件
.frm 表定义文件
.myd 数据文件
.my 索引文件
表锁、行锁表锁
事务ACID不支持
CRDU读、写读多
count扫表专门存储的地方
索引结构B+TreeB+Tree

Storage Engines Feature Summary

官网介绍

FeatureMyISAMMemoryInnoDBArchiveNDB
B-tree indexesYesYesYesNoNo
Backup/point-in-time recovery (note 1)YesYesYesYesYes
Cluster database supportNoNoNoNoYes
Clustered indexesNoNoYesNoNo
Compressed dataYes (note 2)NoYesYesNo
Data cachesNoN/AYesNoYes
Encrypted dataYes (note 3)Yes (note 3)Yes (note 4)Yes (note 3)Yes (note 3)
Foreign key supportNoNoYesNoYes (note 5)
Full-text search indexesYesNoYes (note 6)NoNo
Geospatial data type supportYesNoYesYesYes
Geospatial indexing supportYesNoYes (note 7)NoNo
Hash indexesNoYesNo (note 8)NoYes
Index cachesYesN/AYesNoYes
Locking granularityTableTableRowRowRow
MVCCNoNoYesNoNo
Replication support (note 1)YesLimited (note 9)YesYesYes
Storage limits256TBRAM64TBNone384EB
T-tree indexesNoNoNoNoYes
TransactionsNoNoYesNoYes
Update statistics for data dictionaryYesYesYesYesYes

本文参考自 https://blog.csdn.net/da_guo_li/article/details/80280289

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值