Mysql文件-笔记

     我们小组技术分享mysql,给我表这块,这个知识呀 只要你想学 源源不断 源源不断,我其实想把我们组的分享都弄出来,偷偷的 嘘~

    表是特定实体的数据集合,关系型数据库模型核心,表逻辑存储和实现,物理存储特征:数据在表中是如何组织和存放的

字符集

     计算机只存储二进制数据,存储字符串需要建立之间的映射关系;

编码:把字符映射成二进制

解码:二进制映射到字符

比较大小:同一字符集多种比较规则

字符集:字符范围/编码规则不一样

  对于不同字符,不同字符集有不同编码方式

   我:utf8编码:111001101000100010010001 (3个字节,十六进制表示是:0xE68891)我:gb2312编码:1100111011010010 (2个字节,十六进制表示是:0xCED2)
  • ASCII:128个字符,空格 标点符合 数字 大小写字母 不可见字符,可用1字节编码 https://en.wikipedia.org/wiki/ASCII ASCII码一览表,ASCII码对照表
  • ISO 8859-1/latin1 256字符,ascii基础上扩充128西欧常用字符(德法字母) https://zh.wikipedia.org/wiki/ISO/IEC_8859-1
  • GB2312 汉字6763个/拉丁字母/希腊字母/日文平假名/片假名字母/俄语西里尔字母,兼容ascii,如果ascii中1字节其他2字节 https://zh.wikipedia.org/wiki/GB_2312
  • GBK 对GB2312扩充并兼容 https://zh.wikipedia.org/wiki/%E6%B1%89%E5%AD%97%E5%86%85%E7%A0%81%E6%89%A9%E5%B1%95%E8%A7%84%E8%8C%83
  • utf8 所有字符不断扩充,兼容ascii,变长编码方式,1~4字节 https://en.wikipedia.org/wiki/UTF-8

mysql支持的

  • utf8/utf8mb3:阉割过的utf8字符集,只使用1~3个字节表示字符。

  • utf8mb4:正宗的utf8字符集,使用1~4个字节表示字符。

    SHOW CHARSET; #查看字符集

   SHOW COLLATION LIKE 'utf8\_%';#utf8下的比较规则

   知道列的字符集和比较规则,可用确定存储数据每列实际数据占用的存储空间大小

索引组织表:InnoDB

   据主键顺序组织存放

       无主键:首先使用非空唯一索引(多个选建表时第一个定义的非空唯一索引),否则自动建6字节的指针

InnoDB逻辑存储结构

表空间

  存储结构,含表/索引/大对象长型数据,将数据库中数据组织成 与数据在系统上存储位置相关的 逻辑存储器分组,本身存储在数据库分区组中,默认在共享表空间ibdata1

  对于独立表空间来说则对应的文件系统中表名.ibd文件,多个页的组合,表空间由若干区组成,256区划成一组,每个区都有对应的XDES entry结构来组成链表,对区分门别类进行管理

 开启innodb_file_per_table后每张表(的数据 索引 插入缓冲Bitmap页)会单独放到一张表空间内,其他undo 事务 插入缓冲索引页 二次写缓冲等还是放到共享表空间

  •   可恢复性,可通过单一命令备份/复原表空间中的(同一表空间的)对象
  • 表空间存储表有限,超过了需要创建附加的表空间
  • 可借助自动存储器表空间,由数据库管理器自动管理存储器(尝试平衡容器数据复合)
  • (分配)缓冲池隔离数据,提供性能和内存利用率

 为了方便范围查询,对B+树的非叶子节点和叶子节点借助段进行区分,缩小查询范围

系统表空间

整个MySQL进程只有一个系统表空间,额外记录一些有关整个系统信息的页,所以会比独立表空间多出一些记录这些信息的页

区extent

  连续分配的空间,InnoDB引擎页16KB,一区有64个连续页 1M,当数据量特别大的时候为索引分配空间按区为单位分配,使得B+树物理位置相邻

  1.0x引入压缩页:KEY_BLOCK_SIZE设置每页大小,对应的区被均分

  1.2x支持innodb_page_size指定默认页大小

分类或状态:

   空闲的区free没有被使用的

   有剩余空间的碎片区free_frag

   没有剩余空间的碎片区full_frag,都被用上了

   附属于某个段的区fseg,每一索引可分为叶子节点段和非叶子节点段,InnoDB还另定义些特殊作用的段,这些段中的数据量很大时将使用区来作为基本的分配单位

 

 第一是固定的,本表空间本区的属性,第二个本区本区的页的属性,其中XDES entry(上)

段segment

    逻辑上的概念,若干零散页和完整的区组成段,段组成表,段是数据库的分配单位(段以区为单位申请存储空间),不同类型数据库对象一不同段形式存在

        创建表会创建表段,创建索引会创建索引段,段不要求区间相邻;InnoDB存储引擎表是索引组织的

  为段分配存储空间策略:

    开始向表插入数据,段从某个碎片区以单个页为单位分配存储空间

    当段占用了32个碎片区页后,将以完整的区为单位分配存储空间

       碎片区:直属表空间,可用于不同目的(用于段123),不是所有页为了存储同一段而存在

 插入数据的过程

   段比较少,查看表空间是否状态有free_frag的区,找到取零碎页记录,否则找free将其变为free_frag从该区取零碎页记录,循环直到该区full_frag

   32个页已经被占满,申请完整的区来插入数据,据segmentId建立链表,插入时先获取not_full链表头节点把数据插入对应的区中,该区用完将该节点移动到full链表中

   表中插入一条记录,本质上就是向该表的聚簇索引以及所有二级索引代表的B+树的节点中插入数据

 数据段

   B+树叶子节点

索引段

   B+树非索引节点

回滚段

   管理undolog,每个段记录1024个undo log segment,innoDB默认支持128个回滚段:show variables like 'innodb_undo_logs'

       能支持的max并发事务128*1024,开启事务需要写undo log先去段找空闲位置,有空位时申请undo页

        undolog在commit后将放入一个链表中,判断使用空间小于3/4可被重用,不回被回收,其他事务可记录在当前undolog后面;undolog的离散,清理效率不高

页page/块block

  innodb按页为单位读取,页是磁盘的最小管理单位,默认16KB,1.2x版本后innodb_page_size设置大小

 页类型

FSP_HDR表空间头部信息,存储表空间整体属性,第一个组256个区对应的XDES entry结构

  • FREE Limit:什么时候加入到free链表:什么时候用到什么时候初始化,在该字段表示的页号之前的区都被初始化了,之后的区尚未被初始化

  • Next Unused Segment ID表索引都对应拥有唯一标识SegmentId的2个段,借助当前属性在创建新段时直接使用这个字段的值即可

  • Space Flags表空间属性,是否自动把较长字段放到blob页,页大小,是否是共享表空间/临时表空间/是否加密等
XDES

INNODE

为了存储INODE Entry结构

页结构示意图

文件头描述页信息,尾校验完整性,具体通过指针相当于双向链表连接上下(逻辑上)

数据插入记录:新的记录插入从空闲空间中分配空间

页目录存储每组最后一条记录地址偏移量(槽)每个槽相当于指针指向了不同组的最后一条记录

https://www.cnblogs.com/gered/p/13803642.html

  InnoDB按行存放,列式存储,每行最多存放16KB/2-200行记录(7992),  默认当行最多存储65535byte数据,1byte字节=8bit  1024byte=1k

    show create table 表名; 

    alter table 表名 character set utf8mb4;

预估数据占用存储,优化查询(条数/分页)

InnoDB行记录格式**

   行记录结构类型:show table status like 'table_name'; 字段row_format

Compact

mysql5.0 ,高效存储数据   页中行数据越多,性能越高

  • 变长字段长度列表:非null,有可变列则按列顺序逆序放置,可变字段容许存储的max字节数超过255且真实存储字节数超过127字节使用2字节否则1字节
  • NULL标志位:1标识该行数据容许存储null值,0无

  • 标记头信息:固定5字节;起始两bit未知;n_owned当前记录有多少条记录

           delete_mask是否被删除,占用1进制位,0未被删除,1被删除打个删除标记节省移除后其他记录在磁盘上的重新排列的消耗,被删除记录组成垃圾链表占用的是可重用空间,新记录插入把这些被删除记录占用的空间覆盖掉

         min_rec_mask非叶子节点的最小记录

         heap_no当前记录在本页中的位置,InnoDB会自动给每页加两个记录(伪记录/虚拟记录)代表最小记录和最大记录,对于一个完整记录来说,通过比较主键来比较记录大小: Infimum + Supremum

                   Infimum下界值是010 supermum是011 1xx预留bit

        record_type 当前记录类型,0普通记录 1B+树非叶子节点 2 最小记录 3最大记录 ,上面也能看出来

        next_record页中下条记录的相对位置,真实数据的地址偏移量,链表结构按照主键值由小到大的顺序串连各行记录,Infimun的下一条是本页中最小的用户记录,本页主键值最大的用户记录下一条记录是supremum,所以supresum的next_record是0

null 不占空间实际,另有两隐藏列:事务ID6字节和回滚指针列7字节,无主键还+rowid

 当列类型为varchar/varbinary/blob/text,列超过768byte的数被放到其他页中,行溢出

zlib算法压缩数据,大长度类型有效存储

CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称
ALTER TABLE 表名 ROW_FORMAT=行格式名称

redundant行记录格式

5.0前行记录存储方式

    所有列长度信息逆序存储到字段长度偏移列表,字段长度偏移列表中各列对应的偏移量第一个比特位是否为null的依据,1是否非null

     字段长度偏移列表存储 每列中的值占用的空间 在记录真实数据结束处 的位置

不同字符集占用的空间不同,对null值的处理不同

1byte_offs_flag使用记录的真实数据的长度(上面说的偏移值)占用空间>127则2字节否则1字节,

行溢出数据

varchar :过大会被自动转成test类型

某列数据非常多,本记录的真实数据只会存储该列的前768字节数据和指向其他页的地址

innodb1.0x,zlib算法压缩行数据(高效存储),存放在BLOB的数据完全行溢出,数据页只存放20字节指针,实际数据在off page

char行结构存储

mysql4.1 char(n) n字符长度,不一定定长

  不同的字符集在内部存储占用上有区别:多字节的字符编码不再定长 char(10) 10-30字节

InnoDB数据页结构

InnoDB管理存储空间的基本单位,大小16KB

当前页信息:

   文件头 file header 38byte,通用信息

         fil_page_offset:页偏移值,页号,4字节32bit,表空间最多2^32页,最多支持64TB的数据

   页头 page header 数据页专有的一些信息 各种状态,56byte

        数据页状态信息,page_free可重用空间的首指针

           将值与FileHeader的fil_page_space_or_chesum和fil_page_lsn比较保证页完整性

         

Infimum 和supremum records

     虚拟行记录,限定记录边界,infimum比该页主键值小,supremum可能大的值还要大的值,不能被删除

实际行记录存储空间:动态

   /user records 实际存储的行记录内容

  /free space 尚未使用的空间,每次新增记录从freeSpace中申请记录大小的空间划分到UserRecords,当使用完了还要新记录申请新的页

  /page directory页中某些记录的相对位置

    记录的相对位置;槽slots稀疏目录可能含多个按索引键值顺序存放的记录,可利用二叉查找定位记录

b+树索引只能找到记录所在页,数据把页载入到内存,pageDirectory 二叉查找(时间复杂度低内存查找快)

查找数据过程:

约束

 数据的完整性:

    实体完整性:primary key ,unique key,触发器保证

    域完整性:每列值满足特定条件

        合适数据类型,外键约束(MyISAM不),触发器,default

     触发器:在insert/delete/update前后自动调用sql命令/存储过程

索引:数据结构,有逻辑上概念还代表物理存储方式

set  sql_mode ='STRICT_TRANS_TABLES' 开启严格校验

外键:即时检查

   逻辑外键,业务上维护;

   被引用的表父表,引用的表子表

       子表操作cascade当父表delelte和update时子表数据也delete/update

        set null父表delete或update,子表对应更为null值

        not action父表delete/update抛错不被容许

        restrict父表delete/update抛错,默认设置

   oracle数据库 建立外键的列也要加个索引,innodb/MicrosoftSQLServer自动加了索引,避免外键无索引导致死锁

  

视图

sql查询定义当作表来使用,没有实际的物理存储,mysql5.0

  • 简单:不需要关心对应的表结构/各种条件
  • 安全,只能访问容许查询的结果集,对表的权限管理不需要限制到行和列
  • 数据独立,视图结构确定,屏蔽表结构变化对用户影响

更新操作:视图定义来更新基本表

物化视图:oracle,根据基表实际存在的表,用于存储耗时较多的sql操作结果

                  microsoft sql server 被称为索引视图

     查询重写,对基表查询,能否通物化视图直接得到结果

     刷新:基表DML后,视图何时采用哪种方式基表进行同步

           on demand需要时刷新,on commit基表DML提交时刷新

           刷新的方法:fast 增量,complete完全刷新,force可快速刷新则fast否complete,never不刷新;借助物化视图日志是实现

增加维护成本,不一致问题等隐患,良好的结构设计不需要视图;

建议:

    统一前缀v/view,不要关联太多表 数据冗余,带条件查询,不要直接更新等等

分区表

      数据库高可用性的管理,将一个表或索引分解为多个更小/可管理的部分;并不是所有引擎都支持分区,mysql5.1不支持垂直分区,一个分区中有数据和索引(局部分区)

  • range 行数据基于给定连续区间的列值放入分区,mysql5.5,partition * values less then ();支持子分区
  • list,和上类似,离散的值,mysql5.5;partition * values in (),插入多行遇到未定义,myIsam部分成功,mysql视为一个事务,全部失败;支持子分区
  • hash,自定义的函数表达式返回值(不能为负)
  • key,据数据库的函数
  • columns,直接使用非整型数据进行分区,不支持blob/text

存在主键/唯一索引,分区列必须是唯一索引的组成部分,无主键唯一索引科指定任一列为分区列

null值:mysql数据库分区视null小于任何非null值

  range自动将该值放大最左分区

  list分区显式指出哪个分区放null

  hash和key:分区函数将null值返回0

OLTP在线事务处理,电子商务网络游戏,不一定合适分区,加大B+树查询次数

OLAP在线分析处理,数据仓库数据集市,分区提高查询性能

交换数据

alter table * exchange partition,分区数据可与非分区的表进行交换

   相同表结构,表数据符合分区定义,不能有外键,auto_increment被重置

    

      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/233842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中,一个漂亮的WPF导航界面不仅为用户提供视觉上的享受,更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍: 首先,引人入胜的首页界面是用户与软…

电子电器架构网络演化 —— 车载以太网TSN

电子电器架构网络演化 —— 车载以太网TSN 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消…

CSAPP cache lab - Optimizing Matrix Transpose

CSAPP cache lab part B 矩阵转置 矩阵转置是一种操作,它将矩阵的行和列互换位置,即将原始矩阵的行变为转置矩阵的列,将原始矩阵的列变为转置矩阵的行。转置操作可以通过改变矩阵的布局来方便地进行某些计算和分析。 假设有一个mn的矩阵A&…

【uniapp】调用阿里云OCR图片识别文字:

文章目录 一、效果&#xff1a;二、实现&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; 【阿里官方】高精版OCR文字识别【最新版】-云市场-阿里云 <template><view class"container"><!-- 选择图片 --><button click"imageO…

在win10和Linux上配置SSH 无密码登录

文章目录 一、用途二、在本地机器上使用ssh-keygen产生公钥私钥对1&#xff09;在Linux (或macOS) 上产生SSH公私钥的方法2&#xff09;在win10上产生SSH公私钥的方法a&#xff09;检查windows 本地是否安装有sshb&#xff09;在本地生成SSH密钥对&#xff08;公钥和私钥&#…

2024 年 API 安全:预测和趋势

随着技术以前所未有的速度不断进步&#xff0c;API&#xff08;应用程序编程接口&#xff09;安全性的复杂性也随之增加。随着 API 在现代应用程序和服务中的激增&#xff0c;组织将需要更好地了解其 API 环境以及 API 给运营带来的风险。 到 2024 年&#xff0c;预计几个关键…

基于R语言(SEM)结构方程模型教程

详情点击链接&#xff1a;基于R语言&#xff08;SEM&#xff09;结构方程模型教程 01、R/Rstudio (2)R语言基本操作&#xff0c;包括向量、矩阵、数据框及数据列表等生成和数据提取等 (3)R语言数据文件读取、整理&#xff08;清洗&#xff09;、结果存储等&#xff08;含tidve…

安防视频云平台/可视化监控云平台ARM版EasyCVR无法下载录像文件,如何解决?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。GB28181视频监控/AI智能大数据视频分析EasyCVR平台已经广泛应用在工地…

【gRPC学习】使用go学习gRPC

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 RPC是远程调用,而google实现了grpc比较方便地实现了远程调用,gRPC是一个现代的开源远程过程调用(RPC)框架 概念介绍 在gRPC中&#xff0c;客户端应用程序可以直接调用另一台计算机上的服务器应用程序上的方法&#…

Docker 部署后端项目自动化脚本

文章目录 开机自启动docker打包后端项目Dockerfile文件脚本文件使用 开机自启动docker systemctl enable docker打包后端项目 这里的项目位置是target同级目录 1.在项目下面新建一个bin目录 新建一个package.txt 写入下方代码后 后缀改为.bat echo off echo. echo [信息] 打…

迎接人工智能的下一个时代:ChatGPT的技术实现原理、行业实践以及商业变现途径

课程背景 2023年&#xff0c;以ChatGPT为代表的接近人类水平的对话机器人&#xff0c;AIGC不断刷爆网络&#xff0c;其强大的内容生成能力给人们带来了巨大的震撼。学术界和产业界也都形成共识&#xff1a;AIGC绝非昙花一现&#xff0c;其底层技术和产业生态已经形成了新的格局…

CloudCompare——点云空间圆拟合

目录 1.概述2.软件实现3.完整操作4.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——点云空间圆拟合&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 CloudCompare软件中的Tools——>…

洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes 刷题笔记

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 直接枚举 减枝优化判断 优化1 只有偶数才会是质数 优化2 回文数的判断次数要优于检查素数 先判断是否为回文数再检查是否为质数 if( hw(i)&&isprime(i)) 这里…

物理机与vm文件共享与传输的设置方法

今天跟各位小伙伴&#xff0c;分享一下物理机与vm虚拟机文件共享与传输的设置方法&#xff0c;以供大家参考&#xff01; 一、物理机与虚拟机文件共享设置方法 第一步&#xff1a;先关闭虚拟机&#xff08;客户机&#xff09; 第二步&#xff1a;选择编辑虚拟机设置 第三步&am…

大数据机器学习深度解读决策树算法:技术全解与案例实战

大数据机器学习深度解读决策树算法&#xff1a;技术全解与案例实战 本文深入探讨了机器学习中的决策树算法&#xff0c;从基础概念到高级研究进展&#xff0c;再到实战案例应用&#xff0c;全面解析了决策树的理论及其在现实世界问题中的实际效能。通过技术细节和案例实践&…

stable diffusion 人物高级提示词(四)朝向、画面范围、远近、焦距、机位、拍摄角度

一、朝向 英文中文front view正面Profile view / from side侧面half-front view半正面Back view背面(quarter front view:1.5)四分之一正面 prompt/英文中文翻译looking at the camera看向镜头facing the camera面对镜头turned towards the camera转向镜头looking away from …

计算一个时间序列中每一个元素对应着星期几Series.dt.dayofweek

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算一个时间序列中 各元素是星期几(之后-1) 例:1月9日是周二则返回1 Series.dt.dayofweek [太阳]选择题 以下关于代码输出结果的说法中正确的是? import pandas as pd ts pd.Series(pd.date…

Spring学习 基于注解的AOP配置

5.1.创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

苹果电脑交互式原型设计软件Axure RP 9 mac特色介绍

Axure RP 9 for Mac是一款交互式原型设计软件&#xff0c;使用axure rp9以最佳的方式展示您的作品&#xff0c;优化现代浏览器并为现代工作流程设计。同时确保您的解决方案正确完整地构建。Axure RP 9 for Mac为您整理笔记&#xff0c;将其分配给UI元素&#xff0c;并合并屏幕注…

Visual Studio 2022 AI Code 支持

1.先在 Log In | Codeium Free AI Code Completion & Chat 上注册一个用户 在Visual Stuido 中扩展中搜索 codeium 并安装 安装完成后登录即可。 注意国内可能存在网络问题无法使用这时建议使用代理进行登录。 地址如下&#xff1a; Sign Up | Codeium Free AI Code Co…