mysql结构

 

MySQL程序结构

1. 连接层

ü 提供连接协议:tcp/ip socket

ü 验证连接信息:用户/密码,权限,端口

ü 提供专用连接线程

ü 将SQL语句传递给SQL层

2. SQL层

ü 接收连接层传递的SQL语句

ü 语法检查

ü 语义判断:DDL、DML、 DCL、 DQL

ü 权限检查:是否对库、表有操作权限

ü 解析器解析SQL语句生成多种执行计划

ü 优化器选择成本最低的执行计划

ü 执行器执行SQL语句,得到数据存放位置

ü 查询缓存,query_cache默认不开启,可用redis替代

ü 日志记录

3. 存储引擎层

从磁盘读取数据给SQL层,SQL层将数据结构成表(mysql数据是16进制的),再通过连接层提供的线程返回给用户。

Mysql物理存储结构

MySQL的最底层的物理结构是数据文件(就是操作系统上的一个文件)

MyISAM的表:

user.frm  # 存储列相关信息

user.MYD   # 数据行

user.MYI    # 索引

 

InnoDB(5.5以后默认的存储引擎)的表:

time_zone.frm:存储列相关信息

time_zone.ibd:数据行+索引

ibdata1:共享表空间,存储数据字典,也就是 InnoDB 表的元数据

 

Mysql逻辑存储结构

库,表,列,行

ü 库:库名+库属性:字符集,校验规则

库是存放表对象的容器(盒子)可以存放很多张表和其他对象    

ü 表:表名+表属性:存储引擎,字符集

表包含元数据+真实数据行 ← =(列属性+行记录)

ü 元数据:列+其他属性(行数+占用空间大小+权限)

ü 列:列的名字+列属性:数据类型+约束(非空、唯一、主键、非负数、自增长、默认值)+其他属性

ü 数据行

什么是元数据?

所谓元数据,就是表示数据的数据,这些数据五花八门,总之,只要不是我们存储到数据库里的数据,大多都可以理解为元数据。描述数据库的任何数据—作为数据库内容的对立面—是元数据。因此,列名、数据库名、用户名、版本名以及从SHOW语句得到的结果中的大部分字符串是元数据。还包括INFORMATION_SCHEMA数据库中的表中的内容,因为定义的那些表存储关于数据库对象的信息。

 
InnoDB存储引擎的逻辑存储结构和 Oracle大致相同,所有数据都被逻辑地存放在一个空间中 ,我们称之为表空间 ( tablespace ) 。表空间又由段 ( segment ) 、区 ( extent ) 、页 ( page ) 组成 。页在一些文档中有时也称为块(block) , InnoDB存储引擎的逻辑存储结构大致如图4-1所示。

段:也叫表;
区:物理上连续的64个页;
页:16K大小的存储空间,也是mysql最小的存储空间
一个表就是一个段。MySQL在分配空间时最小分配一个区,每个区默认是1M(64page)


表空间可以看做是InnoDB存储引擎逻辑结构的最高层 ,所有的数据都是存放在表空间中。已经介绍了默认情况下 InnoDB存储引擎有一个共享表空间 ibdata1 ,即所有数据都放在这个表空间内 。如果我们启用了参数innodb_file_per_table ,则每张表内的数据可以单独放到一个表空间内 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值