【MySQL】十三,索引的代价、MySQL数据结构选择的合理性

news2024/12/28 4:22:11

索引的代价

空间上的代价

每建立一个索引都要为它建立一棵B+树,每一棵B+树的每一个节点都是一个数据页,一个页默认会占用 16KB 的存储空间,一棵很大的B+树由许多数据页组成,那就是很大的一片存储空间。

时间上的代价

每次对表中的数据进行增、删、改操作的时候,都需要去修改各个B+树索引。而且,B+树每层节点都是按照索引列的值,从小到大的顺序去排列,从而构成了双向链表。无论用户记录还是目录项记录,都是按照索引列的值从小到大的顺序形成了一个单向链表。而增、删、改操作可能会对节点和记录的排序造成破坏,索引存储引擎需要额外的时间进行一些记录移位、页面分裂、页面回收等操作来维护好节点和操作的顺序。如果我们建立了许多索引,每个索引对应的B+树都要进行相关的维护操作,会非常影响性能。

MySQL数据结构选择的合理性

Hash

在这里插入图片描述在这里插入图片描述hash函数有可能会将两个不同的关键字映射到相同的位置,称之为碰撞。通常采用链接法来解决。
在这里插入图片描述Hash索引适用的存储引擎

  • MyISAM:不支持
  • InnoDB:不支持
  • Memory:支持

自适应 hash

在这里插入图片描述
自适应hash索引的目的是加速根据SQL查询条件定位到叶子节点,尤其是当B+树特别深的时候,通过自适应hash索引可以明显提高数据的查询效率。
查看是否开启了自适应索引

show variables like '%adaptive_hash_index';

二叉搜索树

在这里插入图片描述
如果采用二叉树作为索引结构,那么磁盘的IO次数和索引树的高度是相关的。
在极端的情况下,二叉搜索树会产生如下结构:
在这里插入图片描述
为了提高查询效率,需要减少磁盘IO的次数,进一步就需要减少树的高度。所以,树越“矮胖”越好,树的每层分叉越多越好。

AVL树

在这里插入图片描述将二叉树改为M叉树,当M=3时,结构如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/53d4c44b888b4d48a1760e124a8d0a70.png

B-Tree

在这里插入图片描述 B 树相比于平衡二叉树来说磁盘 I/O 操作要少 ,在数据查询中比平衡二叉树效率要高。所以 只要树的高度足够低,IO次数足够少,就可以提高查询性能 。
在这里插入图片描述

B+Tree

  • 有 k 个孩子的节点就有 k 个关键字。也就是孩子数量 = 关键字数,而 B 树中,孩子数量 = 关键字数+1。
  • 非叶子节点的关键字也会同时存在在子节点中,并且是在子节点中所有关键字的最大(或最小)。
  • 非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。而 B 树中, 非叶子节点既保存索引,也保存数据记录 。
  • 所有关键字都在叶子节点出现,叶子节点构成一个有序链表,而且叶子节点本身按照关键字的大小从小到大顺序链接。

B 树和 B+ 树都可以作为索引的数据结构,在 MySQL 中采用的是 B+ 树。它们各有自己的应用场景。

R树

R-Tree在MySQL很少使用,仅支持 geometry数据类型 ,支持该类型的存储引擎只有myisam、bdb、innodb、ndb、archive几种。

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

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

相关文章

前端开发中的常见优化

目录 外观 兼容 不同尺寸(包裹,height:100%) 不同 浏览器 隐藏滚动条 的 不同属性名 重排->重绘 不显示 display:none->禁用disable 性能 导航重复(修改原型push、replace方法) 搜索防抖 import { debo…

【Docker】Docker私有仓库管理

目录 一 、Harbor 简介1.1 什么是Harbor1.2Harbor的特性1.3Harbor的构成 二、Harbor部署2.1 部署 Docker-Compose 服务2.2 部署 Harbor 服务2.3启动Harbor2.4 创建一个新项目2.5 在其他客户端上传镜像 三、配置Harbor 高可用四、维护管理Harbor4.1. 通过 Harbor Web 创建项目4.…

提升Web3安全性和用户体验:元事务和加密技术的应用

在Web3中,去中心化应用程序(DApps)是一种基于区块链技术的应用程序,它们通过智能合约实现透明、安全、去中心化的业务逻辑。然而,DApps的使用门槛比传统的中心化应用程序更高,需要用户具备一定的技术知识&a…

python简单入门

python简单入门 文章目录 python简单入门[toc] 地址链接1. 官网2. 下载地址3. 官方文档 1. 第一章1.1 python解释器1.2 基础语法1.2.1 常见数据类型1.2.2 强制类型转换1.2.3 注释1.2.4 运算符1.2.5 字符串1.2.5.1 字符串的定义1.2.5.2 字符串拼接1.2.5.3 格式化字符串1.2.5.3 精…

profinet 调试记录

一、 树莓派运行codesys runtime Codesys control for Raspberry Pi (外网) 链接:https://pan.baidu.com/s/1vgURlEG_y4C5rj7rALdOdQ?pwdfkhr 提取码:fkhr 1. 用户名称要以 root 登录 若是普通用户,会提示:脚本必须以 root 身…

Facebook Messenger市场营销,跨境电商不可忽略的营销手段

营销始于广告。广告仍然是不可或缺的,但广告的方式正在发生变化。以前商家会使用广告邮件或者直接转到网站上的产品页面,但是这两种方法都存在很大问题。虽然企业可以通过电子邮件与潜在客户保持联系,但不能保证这些潜在客户会真正看广告邮件…

【算法与数据结构】104、111、LeetCode二叉树的最大/最小深度

文章目录 一、题目二、层序遍历法三、递归法四、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、层序遍历法 思路分析:两道题都可以用层序遍历(迭代法)来做,遍历完…

通付盾获苏州市工业互联网产业联盟“工业互联网看苏州”先锋企业

近日,苏州市工业互联网产业联盟公布2022年度苏州市工业互联网产业联盟系列评选获评名单,通付盾荣获“工业互联网看苏州”先锋企业。 为加快推动工业互联网在数字赋能产业创新集群融合发展中发挥更显著作用,进一步完善苏州市工业互联网产业生态…

Docker Compose 容器编排 + Docker--harbor私有仓库部署与管理

目录 一、Docker Compose简介 1、Docker Compose 的YAML 文件格式及编写注意事项 2、Docker compose 使用的三个步骤 3、 Docker Compose配置常用字段 4、 Docker Compose 常用命令 5、 Docker Compose 文件结构 二: Docker Compose 安装 1、Docker Compose…

【C#】并行编程实战:基于任务的异步编程基础(下)

第八章介绍了 C# 中可用异步编程的实践和解决方案,还讨论了何时适合使用异步编程等。本章主要介绍 async 和 await 关键字。 其实在之前的学习中,大家都已经了解过这两个关键字了,用得非常多。其实我觉得没有必要再赘述了,不过这里…

Git简介与工作原理:了解Git的基本概念、版本控制系统和分布式版本控制的工作原理

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

Centos安装postgresql数据库以及postgis扩展的安装

这几天项目上的数据库迁移差点没把我弄死 ,因为项目上的使用的是postgis来处理地理数据 ,而开发环境的数据库以及postgis扩展并不是我安装的。所以在迁移的时候造成了不小的麻烦。记录一下迁移过程中遇到的。下面以Centos操作系统为例 文章目录 卸载post…

微信小程序——实现手机振动效果

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

解决行业反复“造轮子”现象,全新地平线RDK系列机器人开发者套件上线

7月25日,“地平线2023机器人开发者创享日”在深圳举办,地平线RDK系列机器人开发者套件正式上线,机器人操作系统TogetheROS.Bot™2.0版发布,应用中心NodeHub首发亮相,地平线开发者社区改版上线。 地平线2023机器人开发者…

go性能分析工具之trace

参考文章: https://eddycjy.gitbook.io/golang/di-9-ke-gong-ju/go-tool-trace https://mp.weixin.qq.com/s__bizMzUxMDQxMDMyNg&mid2247484297&idx1&sn7a01fa4f454189fc3ccdb32a6e0d6897&scene21#wechat_redirect 你有没有考虑过,你的g…

HTTP1、 HTTP2、HTTP3 区别

HTTP1、 HTTP2、HTTP3 区别 HTTP1HTTP/1.0和HTTP/1.1的区别HTTP1的缺陷 HTTP2SPDY协议HTTP/2 新特性(即HTTP/2.0和HTTP/1.x的区别)HTTP/2 的缺点 HTTP3QUIC协议HTTP/3 新特性(HTTP/3与HTTP/2、HTTP/1的区别)基于QUIC的0RTT是如何实…

【Linux后端服务器开发】HTTP协议

目录 一、HTTP协议概述 二、HTTP应用层服务器实现 Util.hpp Protocal.hpp Http_Server.hpp http_server.cc indext.html 一、HTTP协议概述 请求和响应怎么保证应用层完整读取完毕了? 读取完整的一行(识别行分隔符),while&…

MobPush Android SDK 厂商推送限制

概述 厂商推送限制 每个厂商通道都有对应的厂商配额和 QPS 限制,当请求超过限制且已配置厂商回执时,MobPush会采取以下措施: 当开发者推送请求超过厂商配额时,MobPush将通过自有通道进行消息下发。当开发者推送请求超过厂商 QP…

elementui el-table 封装表格

ps: 1.3版本 案例&#xff1a; 完整代码&#xff1a; 可直接复制粘贴&#xff0c;但一定要全看完&#xff01; v-slot"scopeRows" 是vue3的写法&#xff1b; vue2是 slot-scope"scope" <template><!-- 简单表格、多层表头、页码、没有合并列行…

2023年度盘点:网络电视盒子哪个好?目前性能最好的电视盒子

挑选电视盒子时配置性能是最重要的&#xff0c;芯片、运存、存储全部会影响到我们的观影体验&#xff0c;想播放流畅、响应速度快&#xff0c;要在预算范围内选择配置最高的产品&#xff0c;那么哪些电视盒子称得上是目前性能最好的电视盒子呢&#xff1f;不懂网络电视盒子哪个…