MySQL执行原理、存储引擎、索引模型简介

1.sql的执行原理

  • Connectors

    连接、支持多种协议,各种语言

  • Management service

    系统管理和控制工具,例如:备份、集群副本管理等

  • pool

    连接池

  • sql interfaces

    sql接口-接收命令返回结果

  • parser

    分析解析器:验证

  • optimizer

    优化器:优化sql执行效率

  • cache and buffer

    查询缓存

  • storage engines

    存储引擎:可插拔

  • file system

    文件系统

1.1mysql的基本架构和执行原理

两个部分:server层与存储引擎层

  • 连接器

    建立客户端和服务器连接、权限获取、维持管理连接

    #mysql -u$user -p$password
    mysql -uroot -p

    mysql本质为客户端连接工具,tcp握手成功,需要进行身份认证

    查询连接状态:

    短链接:执行少数几次查询就会断开,浪费大量资源

    长连接:连接成功后,长时间保持连接,wait_timeout默认连接时间

    查看默认连接时长

    show variables like 'wait_timeout';

    查当前连接时长

    show processlist;

    长连接驻留内存解决方法

    1、固定时间自动重新连接

    2、mysql_reset_connection 重置连接

  • 查询缓存

    query_cache_type:查询缓存类型

    show variables like 'query_cache_type';

    如果需要使用,需要设置为DEMAND(按需)

    缓存失效

    1、增删改操作导致缓存失效

    mysql8.0已将缓存移除

  • 分析器

    词法分析:检测每个单词的含义

    语法分析:对sql语法规则校验,是否满足mysql语法规范

  • 优化器

    选择最优解

    索引选择、执行顺序可能影响执行效率,优化器进行最优选择

    select * from t1 inner join t2 using(ID) where t1.c = 10 and t2.d = 20;

    如下两个执行顺序:

    1、先找到t1.c=10的所有记录和整个t2表关联,最后筛选t2.d=20的记录

    2、先找到t2.d=20的所有记录和整个t1表关联,最后筛选t1.c=10的记录

  • 执行器

    select * from emp where no = 10;

    1、表操作权限验证

    2、innodb存储引擎查询第一行,查看no=10则写道结果集,如果不等于10则跳过整张表查询完毕

    3、将结果返回给客户端

2.存储引擎

2.1存储引擎简介

数据库存储引擎是数据库底层软件组织,数据库管理管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。MySQL的核心就是存储引擎。

mysql底层设计采用可插拔式的存储引擎,用户根据需求,选择或自定义存储引擎

mysql5.5之后默认存储引擎为innodb

1、查看mysql可支持的存储引擎

show engines;

2、各种存储引擎对比

  • innoDB

    mysql5.5默认的存储引擎,事务型数据库。

    1.数据底层的存储:数据表文件-->>.frm(表结构)文件和.ibd(数据和索引)文件

    2.事务:支持热备份,对数据完整性要求较高,mysql是较好选择

    3.锁的粒度:采用MVVC(多版本并发)支持高并发操作,支持四种事务隔离级别,行锁

    4.存储特点:采用聚簇索引

    5.适用场景:更新和查询比较频繁,并发操作、要求事务,支持外键约束

    #查看mysql数据存储位置
    show variables like '%data%';
  • MyISAM

    1.存储形式:数据表文件-->>.frm(表结构)和.MYD和.MYI(数据和索引分离)

    2.事务:不支持

    3.存储特点:非聚簇

    4.其他:全文检索,压缩,延迟更新索引等

    5.适用场景:count计算、查询

  • Memory

    1.数据保存在内存中,增删改查效率高,但是不能持久化

    2.不支持事务、表级锁

2.2如何设置存储引擎

#默认mysql的配置文件路径
修改存储引擎:
default_storage_engine=INNODB#创建表时修改存储引擎:
create table tname(col) engine = INNODB;#查看某张表的基本信息
#命令行模式
show tables status from dbname where name = tname \G;

3.索引

3.1索引简介

索引:为了提升查询效率创建数据机构

3.2常见的索引模型

  • 哈希表

    键-值方式存储数据结构。使用key进行hash计算获取到一个值(位置),去该位置寻找数据(值)
    数组,hash函数 适用场景:
    等值查询
    不适用场景:
    范围查询,存储是无序的哈希碰撞(哈希冲突)
    解决方法:
    1、链表(拉链法)
    即多个不同的key值经过哈希函数的计算后,会出现同一个值的情况。处理方法是拉出一个链表。
    
  • 有序数组

整个数组中排列的是有序的,查找非常方便,可以使用二分法
适用场景:等值查询、范围查询,主要是用与存储静态的数据或者不需要经常变更的数据不适用场景:
进行数据的插入与删除,因为每次插入或删除一个数值时都需要移动后面的数据消耗会比较大

  • 二叉搜索树

        二叉查找树(Binary Search Tree)(又称二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。

二叉树的特点:

1、有链表的快速插入与删除操作的特点,

2、有数组快速查找的优势

3、树最影响效率的是树的深度

二叉树存在的问题:

1、在操作数据时如何平衡二叉树,因为在插入随机的情况下有可能其中不同分支的树深度不同导致查询消耗增加

  • B树

B树的定义:

B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树

每个节点都存有索引和数据,也就是对应的key和value。索引是指向子节点的指针,数据是关键字;
每个节点最多有m-1个关键字(可以存有的键值对),即每个节点至多含有m棵子树;
若根节点不是终端节点,则至少有两棵子树,即最少可以只有1个关键字;
除根节点外的所有非叶节点至少有上限值(m/2)棵子树,即上限值(m/2)-1个关键字;
每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。

B树优点:

1、B树在每一个节点上都存储数据,因此在访问离根节点近的数据时速度会更快

2、继承二叉树优点

  • B+树

B+树特点

B+树结构只在叶子节点才存储真正的数据,其他子节点存储的是数据索引,假设每个子节点大小16KB,则B+树相比B树能存储更多的关键字,每次读入内存的关键字也会更多,这样B+树从磁盘读取数据损耗更低低,因为子节点不存储真正的数据所以B+树的树高也会比B树低很多不需要几层就能存储较大数据,会大大磁盘IO次数。

B+树叶子节点数据是顺序排放的,所以B+树结构对范围查询有天然优势,方便遍历。

B+树结构树的层高稳定,B+树查询效率稳定性更好, 在B+树结构中,分支节点并不存储数据,分支节点只是叶子节点的索引,对于任意关键字的查找都必须从根节点走到分支节点,所有关键字查询路径长度相同,每个数据查询效率相当。B树结构其每一个分支节点上也都保存数据,因此对于每一个数据的查询所走的路径长度是不一样的,效率也不一样,B树稳定性不如B+树好

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

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

相关文章

深入浅出计算机网络 day.1 概论② 因特网概述

当你回头看的时候,你会发现自己走了一段,自己都没想到的路 —— 24.3.9 内容概述 01.网络、互连(联)网与因特网的区别与联系 02.因特网简介 一、网络、互连(联)网与因特网的区别与联系 1.若干节点和链路互连…

论文:CLIP(Contrastive Language-Image Pretraining)

Learning Transferable Visual Models From Natural Language Supervision 训练阶段 模型架构分为两部分,图像编码器和文本编码器,图像编码器可以是比如 resnet50,然后文本编码器可以是 transformer。 训练数据是网络社交媒体上搜集的图像…

GEE:计算一个遥感影像的空像素占比

作者:CSDN @ _养乐多_ 本文将介绍,如何在 Google Earth Engine (GEE) 平台计算一个遥感影像的空像素占比,其中,包含获取研究区内所有像素的总数的代码,以及获取非空像素的总数的代码。 结果如下图所示, 文章目录 一、核心函数1.1 获取研究区内所有像素的总数1.2 获取非…

APP2:android studio如何使用lombok

一、前言 不知道从哪个版本开始,android studio便无法在plugins中下载lombok了,有人说是内置了,好像有这么回事儿。我主要面临如下两个问题: 使用内置lombok,可以自动生成setter、setter、toString等。但是&#xff0…

mediapipe 实现姿态分析——举手检测

目录 人体姿态检测 效果展示 举手检测 行业应用 代码实现 代码分析 效果展示 代码修改,一只手举起即可 总结 啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦^_^啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦♪(^∇^*)啦啦啦…

使用Vue.js开发前端项目

Vue.js是一个非常受欢迎的渐进式JavaScript框架,用于开发强大而互动的前端应用程序。Vue易于上手,同时拥有强大的功能库和灵活的生态系统。在本篇博客中,我将带你了解使用Vue.js开发项目的基本步骤,并提供相应的代码示例。 环境安…

自由职业者如何在Fiverr兼职赚美金

在这个忙碌的时代,大家都渴望在业余时间找到一份兼职,为自己带来额外的收入。然而,很多人常常感到困惑,不知道如何找到一份既赚钱又不耗费太多时间精力的兼职。今天,我想分享一个新的赚钱平台——Fiverr,让…

软件测试 需求

文章目录 1. 需求1.1 什么是需求1.2 为什么要有需求1.3 测试人员眼中的需求1.4 如何深入理解需求 2. 测试用例的概念2.1 什么是测试用例2.2 为什么要有测试用例 3. 软件错误(BUG)的概念4. 开发模型和测试模型4.1 软件的生命周期4.2 瀑布模型(…

【深度学习笔记】6_10 双向循环神经网络bi-rnn

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 6.10 双向循环神经网络 之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信…

STM32---IIC通信协议(含源码,小白进)

写在前面:在前面的学习过程中,我们学习了串口通信的USART(通用同步异步收发器),本节我们将继续学习一种串行通信协议——IIC通信协议。之前我使用51单片机也分享过相关的IIC通信的知识,其实本质的知识是相通…

去哪里找视频素材?这几个视频素材资源网您看看

朋友们,是不是在抖音短视频的创作过程中感觉自己的视频素材库就像饭后的草莓派,美好但不够充实?别担心,我这就给你们送上几个超级赞的素材网站,保证让你的创作素材库瞬间丰富起来 1,蛙学府 这个网站简直就…

Delphi 的Read 与Readln 的区别

结合运行窗口,你输入1 2 3 4 这是一行ReadLn在读入时把这四个数当成一行,read(a,b)只读入了前两个数:1 2,就准备读下一行了,下一行输入3,再下一行输入2,所以输出1232; Read是逐个读…

Python列表及其操作详解,从此不再迷茫!

在前面的文章中,我们详细讲了六大数据类型中的数字类型,字符串类型。相信大家都能够熟练的掌握了。那么今天我们来讲解列表(list)。 这是一种常用且重要的数据类型,List可以用来存储一系列的元素,对于后期…

怎么看待Groq

用眼睛看。 就是字面上的意思用眼睛看。 我属于第一波玩到的,先给大家一个直观的印象,Groq到底有多快。 目前Groq只能选Llama的70b,和Mixtral的MoE,那我选7*8的这个MoE模型来实验。 这么好些字大概花了不到1秒,流式响应,其实是不是流式已经没那么重要了 ,然后看每秒Toke…

MongoDB官网查看 MongoClient 驱动API 文档的详细步骤

目录 MongoDB官网查看 MongoClient 驱动API 文档的详细步骤1、先进入[mongodb的官网](https://www.mongodb.com/zh-cn),点击【服务器文档】2、点击这个 [MongoDB Documentation](https://www.mongodb.com/docs/) 文档。3、然后点开【Java】的驱动文档4、先查看同步的…

【数据结构】详解时间复杂度和空间复杂度的计算

一、时间复杂度(执行的次数) 1.1时间复杂度的概念 1.2时间复杂度的表示方法 1.3算法复杂度的几种情况 1.4简单时间复杂度的计算 例一 例二 例三 1.5复杂时间复杂度的计算 例一:未优化冒泡排序时间复杂度 例二:经过优化…

【海贼王的数据航海:利用数据结构成为数据海洋的霸主】探究二叉树的奥秘

目录 1 -> 树的概念及结构 1.1 -> 树的概念 1.2 -> 树的相关概念 1.3 -> 树的表示 1.4 -> 树在实际中的运用(表示文件系统的目录树结构) 2 -> 二叉树概念及结构 2.1 -> 二叉树的概念 2.2 -> 现实中的二叉树 2.3 -> 特殊的二叉树 2.4 ->…

2024年【P气瓶充装】考试报名及P气瓶充装复审考试

题库来源:安全生产模拟考试一点通公众号小程序 P气瓶充装考试报名是安全生产模拟考试一点通总题库中生成的一套P气瓶充装复审考试,安全生产模拟考试一点通上P气瓶充装作业手机同步练习。2024年【P气瓶充装】考试报名及P气瓶充装复审考试 1、【多选题】《…

WIN32部分知识介绍

🌈前言:此篇博客是为下一篇的《贪吃蛇》的做的前戏工作,这篇会讲到贪吃蛇所用到的一些工具以及函数。 首先在讲WIN32的内容时我们想了解一下他的基本概念: Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外…

vscode插件-TONGYILingma

通义灵码,是一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力,并针对阿里云 SDK/API 的使用场景调优,为开发者带来高…