四:MySQL 表介绍

  • 概述介绍
    • 索引组织表
    • InnoDB 逻辑存储结构
      • 表空间
    • InnoDB行记录格式
      • Compact行记录格式
      • 行溢出数据
    • InnoDB数据页结构
    • 约束
      • 数据完整性
    • 视图
      • 作用
      • 物化视图
    • 分区
      • 分区类型
        • RANGE 分区
        • LIST分区

概述介绍

主要分析表的物理存储特征,即数据在表中是如何组织和存放的.简单来说,表就是关于特定实体的数据集合.这也是关系型数据库模型的核心

索引组织表

在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表.在InnoDB存储引擎表中,每个表都有主键.如果自己没有创建。会判断表中是否有非空的唯一索引(有多个选择第一个),有就将该列设置为主键。没有的话就自动创建一个6字节大小的指针.

InnoDB 逻辑存储结构

从InnoDB存储引擎的逻辑存储结构来看,所有数据都被逻辑的存放在一个空间中,称为表空间(tablespace),表空间又由段(segenmt),区(extent),页(page)组成.页有时也叫做块(block)。

表空间

表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中.上一节有介绍,如果启用了参数 innodb_file_per_table参数。则每张表内的数据可以单独放到一个表空间内,这些信息包括数据,索引和插入缓冲,比如 回滚信息,插入缓冲索引页,系统事务信息等还是存放到原来的共享表空间中.

常见的段有数据段,索引段,回滚段等。

区是由连续页组成的空间,在任何情况下每个区的大小都是1M。为保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4-5个区。在默认情况下,InnoDB存储引擎页的大小为16KB,即一个区中一共有64个连续的页.

和其他数据库一样,InnoDB有页的概念,页是InnoDB磁盘管理的最小单位.默认每个页的大小是16KB.同时可以通过参数 innodb_page_size来设置页的大小 为 4KB,8KB等.
常见的页有:
数据页(B-tree Node)
undo页(undo Log Page)
系统页(System Page)
事务数据页(Transaction system Page)
插入缓冲位图页(Insert Buffer Free List)
插入缓冲空闲列表页(Uncomparessed BLOG Page)
压缩的二进制大对象页(compressed BLOG Page)

InnoDB存储引擎是面向列的(row-oriented),也就说数据是按照行进行存放的.每个页存放的行记录也是硬性定义的.最多允许存放16KB/2-100 行的记录,即7992行记录。也有column-oriented数据库,即按照列来存放数据。比如SysbaseIQ。

InnoDB行记录格式

InnoDB存储引擎和大多数数据库一样,记录是以行的形式存储的.意味着页中保存着一行行的数据。

Compact行记录格式

Compact行记录 是在MySQL 5.0中引入的,其设计目标是高效地存储数据,简单来说,一个页中存放的行数据越多,其性能就越高.下图显示了Compact行记录的存储方式:

行溢出数据

InnoDB存储引擎可以将一条记录中的某些数据存储在真正的数据页面之外.一般认为BLOB,LOB这类的大对象列类型的存储会把数据存放在数据页面之外.

InnoDB数据页结构

页类型为B-tree Node的页存放的即是表中行的实际数据.InnoDB数据页由以下7个部分组成:
File Header 文件头
Page Header 页头
Infimun 和Su[remum Records
User Records 用户记录,即行记录
Free Space 空闲空间
Page Directory 页目录
File Trailer 文件结尾信息
其中File Header,Page Header ,File Trailer 的大小是固定的,分别为 38,56,8 字节,这些空间用来标记该页的一些信息,如Checksum,记录数据页在B+树索引的层数等. 而 User Records ,Free Space,Page Direcotry 这些部分为实际的行记录存储空间,因此大小是动态的。

约束

数据完整性

MySQL 数据完整性有三种形式
实体完整性保证表中有一个主键.这个可以定义Primary Key 或者 Unique Key 约束来保证实体的完整性.
域完整性保证数据每列的值满足特定的条件.在InnoDB存储引擎表中。域 完整性可以通过以下方式保证:
1) 选择合适的数据类型确保一个数据值满足特定条件
2)外键约束
3)编写触发器

参照完整性保证两张表之间的关系.InnoDB存储引擎支持外键,因此允许用户定义外键以强制参照完整性,也可以通过编写触发器以强制执行.

视图

作用

视图的主要作用之一是被用做一个抽象装置,特别是对于一些应用程序,程序本身不需要关系基表的结构,只需要按照视图定义来取或更新数据,因此,视图同时在一定程度上起到一个安全层的作用.虽然视图是基于基表的一个虚拟表.,但是用户可以对某些视图进行更新操作,其本质就是通过视图的定义来更新基本表.一般称可以进行更新操作的视图为可更新视图.

物化视图

Oracle 数据库支持物化视图–该视图不是基于基表的虚表.而是根据基表实际存在的实表. 物化视图可以用于预先计算并保存多表的链接或聚集等耗时较多的SQL操作结果.这样,在执行复制查询时,就可以避免进行这些耗时的操作,从而快速得到结果. MySQL 不支持物化视图,即 MySQL数据库中的视图总是虚拟的。我们可以创建表 来当作物化视图.

分区

分区功能并不是在存储引擎层完成的,因此不是只有InnoDB存储引擎支持分区,常见的存储引擎MyISAM,NDB都支持.分区的过程是将一个表或索引分解为多个更小,更可管理的部分.单就访问数据库的应用而言,从逻辑上讲,只有一个表或者一个索引,但在物理上这个表或索引可能由数十个物理分区组成,每个分区都是独立的对象,可以独自处理.MySQL 只支持水平分区(不拆字段,只拆记录),不支持垂直分区(拆字段).并且MySQL数据库的分区是局部分区索引,即一个分区中既存放了数据又存放了索引。全局分区 是数据放在各个分区,索引放在同一个对象中.

分区类型

RANGE 分区

这是最常用的一种分区.启用分区后,表不再由一个ibd文件组成了.而是由建立分区时的各个分区ibd文件组成.例如:
create table t(
id int
)engine=innodb
partition by range(id)(
partition p0 values less than(10),
partition p1 values less than (20));
当插入了不在分区的值,比如 id =30 .会报错.

LIST分区

LIST分区和RANGE分区非常相似,只是分区列的值是离散的,而非连续的.如:
create table t(
a int,
b int)engine=innodb
partition by LIST(b)(
partition p0 values in (1,3,5,7,9),
partition p1 values in (0,2,4,6,8));

其他分区还有hash分区,key分区。大家可以查阅资料详细了解.
<<MySQL 技术内幕 InnoDB存储引擎 第二版>>。

四:MySQL 表介绍相关推荐

  1. myemployees库的四张表介绍

    前置准备:myemployees 中各张表的数据解释 myemployees/employees 员工表- employee_id 员工编号- first_name 名- last_name 姓- e ...

  2. 导学+初识MySQL+SQL语法规范+数据库相关操作+表相关操作+MySql存储引擎介绍+MySQL表的创建+测试数据类型

    一.导学 1.什么是SQL? 结构化查询语言,数据库管理系统通过SQL语言来管理数据库中的数据: 2.SQL语言组成部分 (1)DDL--数据定义语言,主要定义数据库.表.视图.索引和触发器等 (2) ...

  3. css样式引入形式php,引入css样式表的四种方式介绍

    一.使用STYLE属性: 将STYLE属性直接加在个别的元件标签里. 这种用法的优点 是可灵巧应用样式於各标签中,但是缺点则是没有整篇文件的『统一性』. 二.使用STYLE标签: 将样式规则写在标签之 ...

  4. mysql 模糊查询用法_mysql进阶(六)模糊查询的四种用法介绍

    mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下. 下面介绍mysql中模糊查询的四种用法: 1 %: 表示任意0个或多个字符.可匹配任意类型 ...

  5. c mysql 统计不重复数据库,MySQL_MySQL数据库中分组统计的问题,首先准备四张表A、B、C、D, - phpStudy...

    MySQL数据库中分组统计的问题 首先准备四张表A.B.C.D, -------------------------------- A      | B | C   | D a   b   |   a ...

  6. MySQL——表的四种关联关系

    MySQL--表的四种关联关系 表与表之间的数据记录有关联关系(relationship). 四种表的关联关系:一对一关联.一对多(或多对一)关联.多对多关联.自我关联 一对一关联(one-to-on ...

  7. mysql:设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)表(四)所示

    设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)表(四)所示,数据如表1-2的表( ...

  8. MySql表分区介绍

    一.什么是表分区 表分区就是就是把表的数据切分成不同的块进行存储,可以存储在不同的文件系统.而用户所选择的.实现数据分割的规则被称为分区函数,这在MySQL中它可以是模数,或者是简单的匹配一个连续的数 ...

  9. 利用Flume将MySQL表数据准实时抽取到HDFS

    转自:http://blog.csdn.net/wzy0623/article/details/73650053 一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取 ...

最新文章

  1. Python——raise引发异常
  2. android 的view绘制逻辑
  3. 关于C# this 指针
  4. 【Python】pycharm去掉代码下的波浪线
  5. Hi3516A开发-- UBI 文件系统使用指南
  6. ImageX instead of Ghost
  7. 常见脱壳与反编译工具
  8. 生活大爆炸第三季 那些精妙的台词翻译
  9. dis的前缀单词有哪些_按前后缀分类单词——dis前缀的名词
  10. java判断输入大写字母,java用ascii码判断输入的是大写字母,小写字母还是数字...
  11. 苹果safari浏览器video视频无法播放
  12. 大学物理第二章笔记——高等农林院校基础课程教程系列
  13. 经验分享!java程序员面试十多家公司后的经验心得
  14. ArcGIS干货教程:DEM数字高程模型数据的生成
  15. linux之/proc/cpuinfo详解
  16. CmsTop 大众版运行环境搭建 (CentOS+Nginx+PHP FastCGI)
  17. 如何把三菱plc的数据导入mysql_三菱plc数据采集储存 plc数据采集并存入数据库
  18. 《网络安全工程师笔记》 第一章:虚拟化架构与系统部署
  19. FreeLine 踩坑记录
  20. dynamic web module version 3.0

热门文章

  1. typedef 的用法
  2. [memo] dlopen 与 --export-dynamic
  3. cocosCreator日历插件
  4. MySql数据库解锁ACT_DE_DATABASECHANGELOGLOCK
  5. 2023年最新阿里云国际版支付方式以及注册教程和方法
  6. java好学么_java是什么好学吗?难不难学?
  7. 工作流网(workflow net)
  8. cad转dxf格式文件太大,将CAD图纸文件进行转换成低版本DXF格式如何进行?
  9. 如何修清净心?(净空老法师法语)
  10. 利用线性回归实现股票预测分析