Mysql第二关之存储引擎

简介

所有关于Mysql数据库优化的介绍仿佛都有存储引擎的身影。本文介绍Mysql常用的有MyISAM存储引擎和Innodb存储引擎,还有常见的索引。
Mysql有两种常见的存储引擎,MyISAM和Innodb,它们各有优劣,经过多次优化和迭代,现在常用的一般是Innodb引擎,因此MyISAM仅作基本介绍。

Innodb存储引擎

B+树结构

Mysql默认采用B+树存储结构,MyISAM也是采用B+树存储结构。然而,两者的不同在于,Innodb的叶子结点存储的数据,而MyISAM的叶子结点存储的索引。

在这里插入图片描述

聚簇索引和非聚簇索引

由于Innodb的叶子结点存储的实际数据,叶子结点又是B+树索引结构的一部分,因此这种将数据和索引结合起来的结构,我理解为聚簇索引。而没有将实际数据和索引结构结合起来的索引,理解为非聚簇索引。

聚簇索引:  实际数据是索引结构的一部分
非聚簇索引:实际数据不是索引结构的一部分

虽然MyISAM存储引擎也是B+树数据结构,但其叶子结点存储的数据地址,因此它属于非聚簇索引。
回到Innodb,由于实际数据是索引结构的一部分存储于物理介质之中,因此聚簇索引是唯一的,对于Innodb而言,一般主键索引是聚簇索引,如果未设置主键索引,为了保证Innodb的聚簇索引结构会自动生成主键。

主键索引与辅助索引

索引可以分为主键索引和辅助索引(二级索引)。

主键索引:主键索引的要求就是key的唯一性,对于Innodb而言是聚簇索引,对于MyISAM而言是非聚簇索引。

辅助索引:辅助索引都是非聚簇索引,因为这些索引都不包含实际的数据,只存储部分列值。它可以包含一列或多列,字符串前缀等等。
在这里插入图片描述

辅助索引的原理是将部分列重新构建为一个新的B+树结构,其叶子结点存放主键的ID,然后再通过主键ID回到主键索引中寻找实际的行数据,这个过程称为回表,从逻辑过程上来看,辅助索引一般情况下会查询两次B+树,其耗时会更长,因此在辅助索引优化过程中需要尽量减少回表次数。

如何减少回表次数?

是的,辅助索引的优化原则之一就是尽量减少回表次数,如果要减少回表次数就需要增加辅助索引的命中率。

在这里插入图片描述

根据辅助索引的特性,可以分为:普通索引联合索引覆盖索引前缀索引
  1. 普通索引和前缀索引
    之所以将它们放在一起,是因为它们具有共性。前缀索引是通过截取字符串前N个字符构成一个索引,普通索引是通过单列来构成。在构造这类索引时都需要考虑:

     每个索引数据的强唯一性
    

这样才能保证辅助索引命中率更高,回表次数更少。

  1. 联合索引
    普通索引和前缀索引都是通过单列数据来构建,而联合索引通过多列数据来构建。由于是多个列共同构建的索引,因此它的结构如下:

    在这里插入图片描述

     最左匹配原则:Mysql一直向靠右的列匹配,直到遇到范围查找(like、>、<、between)时停止。
    

如果要弄清最左匹配原则,需要明白联合索引的查找原理。

联合索引的查找原理:
联合索引构建时会生成一颗B+树,这颗B+树是有序的,它的排序规则为:

		左侧排序优先,当左侧相同时再排右侧。

在这里插入图片描述

  1. 覆盖索引
    如果查询的列值已经可以通过辅助索引得到,则不需要回表,这个称为覆盖索引。
    单列索引和联合索引都可以建立成覆盖索引。

B+树与Innodb的存储结构

B+树是Mysql底层的数据结构,其分为叶子结点和非叶子结点,最底层为叶子结点,上层为非叶子结点。通过从上至下的不断二分查找来快速定位。B树又称为Balanced Tree,属于平衡二叉树。

在这里插入图片描述

由于B树只具备随机查找特性,不具备连续查找特性,因此在B树上衍生出了B+树,其底层为双向链表。

在这里插入图片描述
当进行查询时,双向链表提供了顺序查询的基础。叶子结点和非叶子结点属于页结构,除了页结构,还有行、区、段、表空间等等。

存储结构由外到内:表空间 -> 段 -> 区 -> 页 -> 行

页是内存与磁盘交互的最小单位,16KB。 也就是说Innodb内存每次最少取一个叶子结点的数据,然后在内存中操作。
叶子结点中的页属于数据页。

explain关键字

通过explain关键字可以实现查询优化,explain关键字将会给出所列sql的执行信息,包括

id:语句执行顺序的序号
key:索引名称,如果为null,则没有索引
type: 访问类型,常见值有system、const、ref、range、index、all
rows: 扫描的行数

通过以上一些指标可以检测当前的sql语句执行效率如何。

MyISAM

MyISAM由于不支持事务、不支持行级锁、不支持数据容灾等特点,它更多适用于查询较多的情况。
它是非聚簇索引,叶子结点存放物理地址。拿到物理地址后再去数据堆里取数据。它的存储结构如下:
在这里插入图片描述

MYD: 存放实际数据
MYI: 存放索引结构
FMI: 存放表定义等

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

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

相关文章

代码随想录算法训练营第十九天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

654.最大二叉树 刷题https://leetcode.cn/problems/maximum-binary-tree/description/文章讲解https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html视频讲解https://www.bilibili.com/video/BV1MG411G7ox/?vd_sourceaf4853e80f89e28094a5fe…

洛谷题解 - B2015 计算并联电阻的阻值

目录 题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 代码 题目描述 对于阻值为 r 1 r_1 r1​ 和 r 2 r_2 r2​ 的电阻&#xff0c;其并联电阻阻值公式计算如下&#xff1a; R 1 1 r 1 1 r 2 R\dfrac{1}{\dfrac{1}{r_1}\dfrac{1}{r_2}} Rr1​1​r2​1​1​ 输入…

软件工程师,OpenAI Sora驾到,快来围观

概述 近期&#xff0c;OpenAI在其官方网站上公布了Sora文生视频模型的详细信息&#xff0c;展示了其令人印象深刻的能力&#xff0c;包括根据文本输入快速生成长达一分钟的高清视频。Sora的强大之处在于其能够根据文本描述&#xff0c;生成长达60秒的视频&#xff0c;其中包含&…

【Spring1】Spring容器的本质就是两个HashMap

做为Java程序员,我们就是Spring的用户,Spring的影子在我们的代码里几乎是无处不在,那Spring到底是什么,带给我们什么,如何工作的呢?这个简单问题貌似又不太好讲。例如如果要问一下什么是Spring框架, 可以找到大量的解答,基本内容如下: Spring是一个开源的应用程序框架…

计算机网络-OSI模型及网络数据传输(双十一淘宝故事详解版)

首先&#xff0c;把一个资源的传输&#xff0c;想象成在双十一下&#xff0c;商品琳琅满目&#xff0c;然后剁手党们经不住诱惑&#xff0c;疯狂买买买。在OSI中资源传输就相当于淘宝 卖家发货--->买家收货的过程。 其中每一层分别如下所示&#xff1a; 应用层&#xff08…

开源无处不在,发展创新下又有何弊端

随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点&#xff0c;使得越来越多的企业和个人选择使用开源软件&#xff0c;促进了软件行业的繁荣。然而&#xff0c;在使用开源软件的过…

1、若依(前后端分离)框架的使用

若依&#xff08;前后端分离&#xff09;框架的使用 0、环境1、下载若依(1) 下载并解压(2) 导入SQL语句(3) 配置Redis、MySQL 2、运行若依3、登录(1) 前端(2) 后端 4、获取用户角色、权限和动态路由(1) 获取用户角色、权限(2) 根据用户信息获取动态路由【getRouters】 5、杂6、…

python37-Python列表和元组之长度、最大值和最小值

Python提供了内置的len()max()min()全局函数来获取元组或列表的长度、最大值和最小值。 由于max()、min()要对元组、列表中的元素比较大小,因此程序要求传给max(),min()函数的元组、列表的元素必须是相同类型且可以比较大小。例如如下代码: # !/usr/bin/env python# -*- cod…

阿里云服务器ECS租赁费用报价_CPU内存_带宽和系统盘价格表

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

jmeter-09v函数进行参数拼接(动态变量名)

文章目录 一、测试场景二、连接数据库,随机查询五本书籍信息连接数据库随机查询五本书籍信息三、循环控制器四、计数器五、v函数六、新建请求(使用v函数)七、结果一、测试场景 从数据库随机查询五本书的详细信息,然后根据数据库返回的五本书的id去分别访问这五本书的对应的…

解线性方程组(二)——Jacobi迭代法求解(C++)

迭代法 相比于直接法求解&#xff0c;迭代法使用多次迭代来逐渐逼近解&#xff0c;其精度比不上直接法&#xff0c;但是其速度会比直接法快很多&#xff0c;计算精度可控&#xff0c;特别适用于求解系数矩阵为大型稀疏矩阵的方程组。 Jacobi迭代法 假设有方程组如下&#xf…

QGIS004:【08图层工具箱】-导出到电子表格、提取图层范围

摘要&#xff1a;QGIS图层工具箱常用工具有导出到电子表格、提取图层范围等选项&#xff0c;本文介绍各选项的基本操作。 实验数据&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ZK4_ShrQ5BsbyWfJ6fVW4A?pwdpiap 提取码&#xff1a;piap 一、导出到电子表格 工具…

OpenAl 视频生成模型 —— Sora技术报告解读

这里是陌小北&#xff0c;一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的&#xff0c;背诗的里面最会写段子的&#xff0c;写段子的里面代码写得最好的…厨子。 写在前面 早上醒来&#xff0c;就看到OpenAl推出的视频模型Sora炸锅了&#xff0c;感觉所…

代码随想录 Leetcode452. 用最少数量的箭引爆气球

题目9&#xff1a; 代码&#xff08;首刷看解析 2024年2月17日&#xff09;&#xff1a; class Solution { private:const static bool cmp(vector<int>& a, vector<int>& b) {return a[0] < b[0];} public:int findMinArrowShots(vector<vector<…

Linux下解压tar.xz文件的命令

tar -c: 建立压缩档案-x&#xff1a;解压-t&#xff1a;查看内容-r&#xff1a;向压缩归档文件末尾追加文件-u&#xff1a;更新原压缩包中的文件 ------------------------------------------ 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的…

如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口

在Qt框架中&#xff0c;要实现一个无标题栏、半透明、置顶&#xff08;悬浮&#xff09;的窗口&#xff0c;需要一些特定的设置和技巧。废话不多说&#xff0c;下面我将以DrawClient软件为例&#xff0c;介绍一下实现这种效果的四个要点。 要点一&#xff1a;移除标题栏&#…

定时器外部时钟

一、相较于内部时钟中断改动&#xff1a; 1.Timer.c RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_…

BUGKU-WEB 头等舱

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 先看看源码再看看F12请求和响应 相关工具 略 解题步骤 查看源码&#xff0c;好家伙真的什么也没有 2. 看看F12请求和响应&#xff0c;找到了 得到Flag flag{a49c7aba1014c3673ec9982946d0545a…

fastposter v2.18.0 一分钟完成开发海报-云服务来袭

fastposter v2.18.0 一分钟完成开发海报-云服务来袭 fastposter 是一款快速开发海报的工具&#xff0c;已经服务众多电商、行业海报、分销系统、电商海报、电商主图等海报生成和制作场景。 什么是 fastposter &#x1f525;&#x1f525;&#x1f525;fastposter 是一款海报…

【数据结构】16 二叉树的定义,性质,存储结构(以及先序、后序、中序遍历)

二叉树 一个二叉树是一个有穷的结点集合。 它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成的。 二叉树可具有以下5种形态。 性质 一个二叉树第i层的最大结点数为 2 i − 1 2^{i-1} 2i−1, i ≥ 1 i \geq 1 i≥1 每层最大结点可以对应完美二叉树&#xff08;…