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…

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

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

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

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

阿里云服务器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…

解线性方程组(二)——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;…

CSDN如何获得更多勋章?

文章目录 前言一、如何找到自己的勋章&#xff1f;二、如何获得更多勋章&#xff1f;三、重点勋章、易得勋章介绍&推荐1.创作能手2.五一创作勋章3.创作纪念日IT一周年勋章4.新秀勋章5.话题达人6.128天创作纪念日&#xff08;IT博客专属&#xff09;7.GitHub绑定勋章8.其他 …

TIM(Timer)定时中断 P1

难点&#xff1a;定时器级联、主从模式 一、简介&#xff1a; 1.TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 补充&#xff1a; { 定时器本质上是一个计数器&#xff0c;可以工作在定时或计数模式&…

如何简单上手清华AutoGPT并搭建到本地环境

一、准备工作 安装Docker&#xff1a;确保你的本地机器上已经安装了Docker。如果还没有安装&#xff0c;请访问Docker官方网站并按照指引进行安装。--点击进入Docker官网 获取清华AutoGPT的Docker镜像&#xff1a;清华AutoGPT团队可能已经提供了一个Docker镜像&#xff0c;方便…

java8新特性——StreamAPI

说明&#xff1a; java8中有两大最为重要的改变。第一个是Lambda表达式&#xff1b;另外一个则是Stream API。 Stream API&#xff08;java.util.stream&#xff09;把真正的函数式编程风格引入java。这是目前为止对java类库最好的补充&#xff0c;因为Stream API可以极大提供j…

AI:130-基于深度学习的室内导航与定位

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

红蓝对抗:网络安全领域的模拟实战演练

引言&#xff1a; 随着信息技术的快速发展&#xff0c;网络安全问题日益突出。为了应对这一挑战&#xff0c;企业和组织需要不断提升自身的安全防护能力。红蓝对抗作为一种模拟实战演练方法&#xff0c;在网络安全领域得到了广泛应用。本文将介绍红蓝对抗的概念、目的、过程和…