当前位置: 首页 > news >正文

Mysql——索引

索引的类型

  • 按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
  • 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
  • 按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
  • 按「字段个数」分类:单列索引、联合索引。

Mysql索引底层数据结构

        不同的存储引擎使用不同的数据结构来实现索引。

InnoDB 是 MySQL 默认的存储引擎( 5.5 之后),使用 B+ 树(B+ Tree)来实现其索引。

使用B+树作为索引的好处

        B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B 树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B 树更“矮胖”,查询底层节点的磁盘 I/O次数会更少。

        B+ 树通过分裂和合并节点来保持平衡,从而使插入和删除操作在最坏情况下的时间复杂度为 O(log n)。这种平衡机制保证了插入和删除操作的效率都比B树更高,比如删除根节点的时候,不会像 B 树那样会发生复杂的树的变化。

        B+ 树的叶子节点按顺序链接,形成了一个链表结构。这使得范围查询非常高效,因为可以从起始位置遍历到终止位置,无需回溯。Hash 在做等值查询的时候效率贼快,搜索复杂度为 O(1)。但是 Hash 表不适合做范围查询,而 B 树要实现范围查询,只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 I/O 操作,范围查询效率也不如 B+ 树。

相关文章:

  • opencv进阶 ——(十一)基于RMBG实现生活照生成寸照
  • 【相关概念】经济金融中的Momentum
  • Base64前端图片乱码转换
  • Qt——升级系列(Level Two):Hello Qt 程序实现、项目文件解析、Qt 编程注意事项
  • 线性回归模型
  • docker 命令 ps,inspect,top,logs详解
  • Python 使用全局变量:深入探索与实战指南
  • Pycharm SSH远程连接时出现报错,测试 SFTP 连接,连接到 ‘connect.westb.seetacloud.com‘ 失败
  • React Router v5 和 v6 中,路由对象声明方式有什么区别?
  • 腾讯云centos上安装docker
  • 在LabVIEW项目管理中,如何确保团队之间的有效沟通和协作
  • 算法题day37日(补5.23日卡:贪心算法day4)
  • 【DevOps】网络安全进阶之路:打造更安全、更可靠的网站
  • C语言笔记第10篇:内存函数
  • 【动手学深度学习】卷积神经网络(AlexNet)的研究详情
  • django开发-定时任务的使用
  • Javascript基础之Array数组API
  • js 实现textarea输入字数提示
  • Promise初体验
  • SegmentFault 2015 Top Rank
  • 面试遇到的一些题
  • 如何优雅地使用 Sublime Text
  • 世界上最简单的无等待算法(getAndIncrement)
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 通过几道题目学习二叉搜索树
  • 我感觉这是史上最牛的防sql注入方法类
  • 写给高年级小学生看的《Bash 指南》
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 回归生活:清理微信公众号
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #HarmonyOS:Web组件的使用
  • #职场发展#其他
  • ${factoryList }后面有空格不影响
  • (12)Linux 常见的三种进程状态
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (八)c52学习之旅-中断实验
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (九)c52学习之旅-定时器
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)vue-router+UI组件库
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (生成器)yield与(迭代器)generator
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (转)项目管理杂谈-我所期望的新人
  • (转载)OpenStack Hacker养成指南
  • **CI中自动类加载的用法总结
  • *1 计算机基础和操作系统基础及几大协议
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET IoC 容器(三)Autofac
  • .NET MVC第五章、模型绑定获取表单数据