首页 > 数据库 >1.MySQL、基础架构(SQL语句执行流程、更新语句执行流程)

1.MySQL、基础架构(SQL语句执行流程、更新语句执行流程)

时间:2023-09-18 21:14:47浏览次数:47  
标签:语句 缓存 log 流程 SQL --- 索引 基础架构 MySQL

1.MySQL的索引有哪些
索引在什么层面:
  索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。
B+树索引:是大多数 MySQL 存储引擎的默认索引类型。
哈希索引:哈希索引能以 O(1) 时间进行查找,但是失去了有序性;InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的一些优点,比如快速的哈希查找。
全文索引:MyISAM 存储引擎支持全文索引,用于查找文本中的关键词,而不是直接比较是否相等。查找条件使用 match against,而不是普通的 WHERE。全文索引一般使用倒排索引实现,它记录着关键词到其所在文档的映射。InnoDB 存储引擎在 MySQL 5.6.4 版本中也开始支持全文索引。
空间数据索引:MyISAM 存储引擎支持空间数据索引(R-Tree),可以用于地理数据存储。空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询。
 
2.什么是B+树,为什么B+树成为主要SQL数据库的索引实现
  B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且小于等于 keyi+1。
 
3.什么是关系型数据库
  关系型数据库:一种建立在关系上的数据库,关系模型表明了数据库中所存储数据之间的联系。是指采用了关系模型来组织数据的数据库,以行和列形式存储数据,以便用户理解。
  常见关系型数据库:MySQL、PostgreSQL、Oracle、SQL Server、SQLite
什么是SQL:SQL是一种结构化查询语言,专门用来与数据库打交道,目的是提供一种从数据库中读写数据的简单有效的方法。
什么是MySQL:MySQL是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据。
 
4.MySQL有什么优点?为什么如此流行?
成熟稳定、功能完善。
开源免费
文档丰富
开箱即用
支持分库分表,读写分离
 
5.一个 SQL 语句在 MySQL 中的执行流程:
  ·连接器:身份认证和权限相关(登录 MySQL 的时候)。
  ·查询缓存:执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。
  ·分析器:没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。
  ·优化器:按照 MySQL 认为最优的方案去执行。
  ·执行器:执行语句,然后从存储引擎返回数据。

6. 从准备更新一条数据到事务的提交流程描述
(1)首先执行器根据 MySQL 的执行计划来查询数据,先是从缓存池中查询数据,如果没有就会去数据库查询,如果查询到了就将其放到缓存池中
(2)在数据被缓存到缓存池的同时,会写入undo log日志文件
(3)更新动作是在BufferPool中完成的,同时会将更新后的数据添加到redo log buffer中
(4)完成以后就可以提交事务,在提交的同时会做以下三件事: 
(5)将redo log buffer中的数据刷入到redo log文件中
(6)将本次操作记录写入到bin log文件中
(7)将bin log文件名字和更新内容在bin log中的位置记录到redo log中,同时在redo log最后添加commit标记

 


总结-
· MySQL主要分为Server层和引擎层,Server 层主要包括连接器、查询缓存、分析器、优化器、执行器,同时还有一个日志模块(binlog),这个日志模块所有执行引擎都可以共用,redolog只有InnoDB有。
· 引擎层是插件式的,目前主要包括,MyISAM,InnoDB,Memory 等。
· 查询语句的执行流程如下:权限校验(如果命中缓存)--->查询缓存--->分析器--->优化器--->权限校验--->执行器--->引擎
· 更新语句执行流程如下:分析器---->权限校验---->执行器--->引擎---redo log(prepare 状态)--->binlog--->redo log(commit状态)
 
 
 

标签:语句,缓存,log,流程,SQL,---,索引,基础架构,MySQL
From: https://www.cnblogs.com/cjhtxdy/p/17713047.html

相关文章

  • 用微服务平台框架,实现高效的流程化办公!
    想要实现流程化办公,可以用什么样的软件平台实现?随着市场竞争越来越激烈,很多企业会采用低代码技术平台实现高效管理企业的内部资源,从而减少很多繁琐工作和时间,实现提质增效的目的。流辰信息助力大家采用微服务平台框架低代码技术平台打破信息孤岛,创造高效办公。低代码的便捷性和灵......
  • DNS解析流程概述
    为了提高DNS的解析性能,很多网络都会就近部署DNS缓存服务器。于是,就有了以下的DNS解析流程。1、电脑客户端会发出一个DNS请求,问www.163.com的IP是啥啊,并发给本地域名服务器(本地DNS)。那本地域名服务器(本地DNS)是什么呢?如果是通过DHCP配置,本地DNS由你的网络服......
  • Kingbase ES 函数返回-return语句
    文章概要:本文在https://www.cnblogs.com/kingbase/p/15703611.html一文的基础上总结了KingbaseES中函数能支持的return语句,整体上兼容oracle的基础上,也和PG语法一样。同时列举了sqlserevr表值函数和代码故障案例。一,关于return语句有5个return语句可以用来从KES函数中返回数......
  • COA,HRIPT,BCOP这三个有什么区别?流程怎么办理?
    COA,HRIPT,BCOP这三个有什么区别?流程怎么办理?亚马逊为什么要求美妆提供HRIPT/RIPT斑贴测试COA分析和BCOP认证?亚马逊要求化妆、美容类产品需做此测试为了确保在使用产品或原料后不会产生潜在的刺激或过敏。亚马逊要求化妆品,美容产品,指甲胶等需要做HRIPT/RIPT多次重复封闭性皮肤斑贴......
  • Java(day17):Java 的循环退出语句 break、continue
    在Java中,循环是一种重要的控制流结构,它允许程序重复执行某段代码,直到满足特定的条件为止。但在某些情况下,我们可能需要在循环中提前退出或跳过某些迭代。这时我们可以使用Java中的两个循环控制语句:break和continue。break语句break语句用于完全退出当前所在的循环,不再执行循环中......
  • 20个最佳实践提升Terraform工作流程|Part 1
    Terraform是管理基础设施及代码(IaC)最常用的工具之一,它能使我们安全且可预测地对基础设施应用更改。刚开始上手Terraform可能会感觉有些不容易,但很快就能对该工具有基本的了解,随之可以开始运行命令、创建和重构Terraform代码。在此过程中,许多新用户面临着如何正确构建代码、使......
  • MySQL实战实战系列 02 日志系统:一条SQL更新语句是如何执行的?
    前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条更新语句的执行流程又是怎样的呢? 之前你可能经常听DBA同事说,MySQL可以......
  • MMDetection 整体构建流程(一)
    训练核心组件训练部分一般包括9个核心组件,总体流程是:任何一个batch的图片先输入到backbone中进行特征提取,典型的骨干网络是ResNet输出的单尺度或者多尺度特征图输入到neck模块中进行特征融合或者增强,典型的neck是FPN上述多尺度特征最终输入到head部分,一般都会......
  • 渗透测试流程
    渗透测试流程一、渗透测试的相关知识1、标准的渗透测试流程信息收集寻找外网入口权限维持与提升内网渗透痕迹清除2、什么是社工?全称社会工程学。一种利用受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段取得自身利益的手法。3、......
  • 【C语言初阶】switch语句的基本语法
    (文章目录)前言  <fontcolor=green>......