首页 > 数据库 >MySQL_基础

MySQL_基础

时间:2023-11-23 17:16:24浏览次数:31  
标签:存储 字节 基础 查询 索引 InnoDB MySQL

MySQL架构

  1. Server层:建立连接、分析和执行SQL
  2. 存储引擎层:数据的存储和提取。

不同的存储引擎共用一个Server层。
1a.连接器:与客户端三次握手建立TCP连接 -> -u -p错误,报错 -> 正确,读取用户的权限,后面的权限逻辑判断基于此时读取到的权限。
1b. 查询缓存:MySQL8.0后将缓存删掉了。
1c. 解析器:select name from user词法分析(识别出关键字selectfrom) -> 语法分析(符不符合MySQL语法)
1d. 执行器:1d1. prepare预处理阶段:检查SQL语句中的表和字段是否存在nameuser。将SELECT *中的*扩展为表上的所有列。1d2. 优化器:将SQL查询语句的执行方案确定下来。1d3. 执行器:执行SQL语句(执行器和存储引擎交互、三种方式:1主键索引查询2全表扫描3索引下推)

关系型数据库

关系型数据库:
通过表来存储数据的数据库。

存储引擎

作用:
决定数据库中数据存储、获取、更新、查询的方式

InnoDB存储引擎

特点:
事务、外键、行级锁。

何时选择InnoDB存储引擎

何时选择InnoDB:
对事务的完整并发有较高要求的,核心数据。(绝大部分时候选择InnoDB)。
MyISAM:
对事务的完整性和并发行没有较高要求,增加查询多,更新删除少,非核心数据。被MongoDB替代了。
Memory:
数据都在内存中,常用于缓存、临时表,但是无法存储太大的数据。被Redis替代了。

索引-结构

Mysql的索引是在存储引擎层实现的。
不同索引结构被存储引擎的支持情况:
B+Tree:InnoDB,MyISAM,Memory
Hash:Memory
R-Tree:MyISAM
FULL-text:MyISAM,InnoDB(5.6后版本)

索引-最左前缀法则

最左前缀法则:
如果索引了多列(联合索引),就要遵守最左前缀法则。查询从索引的最左列开始,而不跳过索引中的列,如果跳过某一列,索引将部分失效(后面的字段索引失效)。
范围查询:
联合索引中,出现范围查询<,>范围查询右侧的索引列失效。(解决方法:使用<=,>=时右侧的索引列就不会失效了)

回表

定义:
第一次搜索B+树拿到主键值后再去搜索主键索引的B+树,这个过程就是所谓的回表。

执行一条SQL语句,期间发生了什么

  • 连接器:建立连接,验证身份。
  • (查询缓存):MySQL8.0已删除。
  • 解析SQL:词法分析,语法分析
  • 执行SQL:
    1. 预处理阶段:检查表或字段是否存在,将SELECT **扩展为表上的所有列。
    2. 优化阶段:选择查询成本最小的执行计划。
    3. 执行阶段:执行SQL查询语句,从存储引擎读取记录,返回给客户端。

MySQL行记录的存储

MySQL数据存储在哪个文件?

默认InnoDB存储引擎:

  1. db.opt:数据库默认字符集、字符校验规则
  2. 表名.frm:表结构
  3. 表名.ibd:表数据(这个文件也叫独占表空间文件)
表空间文件的结构是怎么样的?

表空间(从大到小):
段segment,区extent,页page,行row

  1. 行:记录是按行进行存放的。
  2. 页:InnoDB的数据是按页进行读写的。16KB
  3. 区:B+树链表中相邻的页物理位置也相邻,这样就可以使用顺序IO了,在范围查询(扫描叶子节点)的时候性能会更高。1MB,64个页。
  4. 段:
    1. 索引段:B+树非叶子节点的区的集合。
    2. 数据段:B+树叶子节点的区的集合。
    3. 回滚段:回滚数据的区的集合。
InnoDB的行格式

行格式:
InnoDB 在MySQL5.6后用Dynamic(基于Compact改了一点东西)
Compact行格式:
额外信息+真实数据

  1. 额外信息:
    变长字段长度列表+NULL值列表+记录头信息
    1. 变长字段长度列表:逆序存放、不记录NULL
      为什么逆序?
      提高CPU Cache的命中率(使位置靠前的记录的真实数据和字段长度信息可以同时在一个CPU Cache Line中,NULL值列表逆序原因同理)。
      一定有变长字段列表吗?
      不一定,如果数据表没有变长字段则没有。
    2. NULL值列表:逆序,仅记录可以为NULL的字段
      长度:
      默认1字节8位,若全是NOT NULL,则长度为0,若可以为0的字段多于8个,则为2字节16位。
    3. 记录头信息:
      delete_mask:删除标记,1删除。
      next_record:下一条记录的位置,额外信息和真实数据之间。
      record_type:记录类型,0普通,1非叶子节点,2最小记录,3最大记录。
  2. 真实数据
    1. row_id:6字节,非必须,没有主键&&没有唯一约束列时,InnoDB添加的隐藏字段。
    2. trx_id:6字节,必须,哪个事务生成的。
    3. roll_pointer:7字节,必须,上一个版本的指针,MVCC。
Q:varchar(n)中n的最大取值是多少?

MySQL中除了TEXT,BLOBs外,其它所有列(隐藏列,记录头信息除外)占用的字节长度不能超过65535字节。(ASCII编码时,1字符=1字节)(varchar(n),n代表字符数)(UTF-8,1字符=3字节)
A:单字段情况-变长字段长度列表2字节,NULL值列表1字节,n最大65532字节
B:多字段情况-(所有字段长度+变长字段长度列表+NULL值列表)<=65535

行溢出后,MySQL是怎么处理的?

存放到溢出页。(TEXT,BLOB)
Compact行格式:真实数据处保留一部分,其余20字节-溢出页的地址。
Compressed && Dynamic:不保留,只存储20字节-溢出页的地址。

标签:存储,字节,基础,查询,索引,InnoDB,MySQL
From: https://www.cnblogs.com/espgod/p/17840039.html

相关文章

  • MySQL中count()、sum()区别
    1、count0函数里面的参数是列名的的时候,会计算有值项的次数sum(函数里面的参数是列名的时候,会计算列名的值的和。2、两个函数在记录的列名的值为空或者是null时,都不会去统计即count(列名)和sum(列名)都不计入这条记录3、count()可以计算出行数,count(1)也可以计算出行数、1......
  • 计算机基础
    计算机基础(一)编程语言和编程(1)什么是语言?语言是一种人与人之间交流沟通的媒介,例如:英语、汉语。(2)什么是编程语言?编程语言是人与计算机之间沟通交流的媒介。(3)为什么会出现编程语言?编程语言的出现是为了让人能够与计算机进行有效的沟通。计算机在编程者的控制下按照指......
  • 深度学习基础知识-网络
    循环神经网络(RerrentNeuralNetwork,RNN): 特点:对具有序列特性的数据非常有效,能挖掘数据中的时序信息以及语义信息序列特性:符合时间顺序,逻辑顺序,或者其他顺序就叫序列特性深度神经网络DNN,卷积神经网络CNN,生成对抗网络GAN ......
  • 快手视频作品评论区提取工具,可采集UID,真实ID,评论内容开源版!基础代码
    之前给客户定制了一个提取视频评论区用户数据的功能,这个就是POST抓包解密形式的,所以都是公开的的,网页端提取,输入视频链接导入COOKIE【浏览器F12可提取COOKIE】就能自动提取作品下的所有评论内容用户di等信息,我这边直接把所有源码都分享出来。设计界面:  COOKIE输入:【浏览器F......
  • MySQL 8.0支持哪些数据类型?
    数值数据类型整数类型:TINYINT:微型整数类型;占用1bytes空间;有符号支持的范围:-128~127;无符号支持的范围:0~255。SMALLINT:小型整数类型;占用2bytes空间;有符号支持的范围:-32768~32767;无符号支持的范围:0~65535。MEDIUMINT:中型整数类型;占用3bytes空间;有符号支持的范......
  • 影响MySQL 8.0单列索引长度的因素有哪些?
    MySQL8.0支持的单列索引长度最大是3072bytes,影响单列索引长度的因素有哪些:innodb_page_size:InnoDB页大小,默认是16KB。支持5种size:4k、8k、16k、32k、64k。row_format:表的行格式,默认是“dynamic”。支持6种格式:DEFAULT、DYNAMIC、FIXED、COMPRESSED、REDUNDANT、COMPACT。......
  • Windows基础
    403:可能没有访问具体页面,只是访问到目录500:服务器代码可能出现错误了常用的命令在C:\Windows\system32/这个目录C:\Windows\system32/driver\etc\hosts会影响域名解析,优先级要高于DNSC:\Windows\system32\config\sam这个文件中记录了账户和密码,如果忘了了的话在PE模式......
  • 国家某部委实现几十条专线监控与IT基础设施统一运维
    一、背景介绍  国家某部委是我国重要的政府机构,负责全国范围内的专项工作。随着业务的不断发展,该部委面临着几十条专线及IT基础设施监控的难题。为了保障业务的稳定性和安全性,该部委决定引入监控易7.0专线管理模块和IT基础设施监控模块,以实现全面、高效的监控管理。  专线......
  • 一个基于php+mysql的外卖订餐网站(带源码)
    订饭组一个基于php+mysql的外卖订餐网站,包括前端和后台。测试账号:admin密码:admin运行环境:Apache+PHP+Mysql代码说明htaccessRewrite配置文件,需要放入到项目根目录configs.php需要配置数据库连接信息(主机、用户名、密码),系统常量等data.sql位于data目录中,是数据库备份文件,需要提......
  • arduino基础语法
     ***通信***上位机与下位机通信管道Serial.begin(57600)设置波特率(通信速率)下位机-------->上位机Serial.print();//打印函数Serial.println();//换行打印函数上位机-------->下位机Serial.available();//获取传输的字节数 Serial.read();//一次读取一个字节**......