mysql索引的数据结构(Innodb)

首选要注意,这里的数据结构是存储在硬盘上的数据结构,不是内存中的数据结构,要重点考虑io次数.

一.不适合的数据结构:

1.Hash:不适合进行范围查询和模糊匹配查询.(有些数据库索引会使用Hash,但是只能精准匹配)

2.红黑树:可以范围查询和模糊匹配,但是和硬盘io次数比较多.

二.为数据库量身打造的数据结构(B+树): 

1.B树(又称B-树):

 

a)本质上是N叉搜索树:一个节点保存多个key,N个key延展出N+1个节点(划分出N+1个区间).

从根节点出发,依次往下查找. 

b)相较红黑树的优点:每个节点都可以存放多个元素,当总的元素个数确定的时候,节点数大大降低了,树的高度也降低了,查询时io次数减少了,查询效率提高了.

c)拆分和合并:在进行插入和删除元素的时候,一个节点可以存多个元素,但也不能没有限制的存,当达到一定数量的时候,就要把这个节点拆分,把这个节点中的一部分元素以数的子节点的方式来进行重新组织.

2.B+树:

  

特点: 

a)N叉搜索树,但是N个元素分出N个区间节点最后一个元素就是最大值.

b)父节点的元素在子节点中重复出现(以最大值的身份).,叶子节点这一层,包含了所有元素.

c)叶子节点按照双向链表的方式,收尾相连,快速地找到上一个/下一个元素,方便范围查询.

优势: 

a)特别擅长范围查询.

b)所有的查询最终会落到叶子节点,比较次数均衡,查询时间稳定.

c) 由于叶子节点上是完整的元素全集,因此表的每一行元素的其他列,都可以保存到叶子节点上,而非叶子节点,指存储构件索引的id就可以了.因此,非叶子节点的存储空间消耗非常小,可以在内存中缓存一份,这样减少了硬盘io次数,提高了查询效率.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习笔记 - 关于GPT-4的一些问题清单

一、简述 据报道,GPT-4 的系统由八个模型组成,每个模型都有 2200 亿个参数。GPT-4 的参数总数估计约为 1.76 万亿个。 近年来,得益于 GPT-4 等高级语言模型的发展,自然语言处理(NLP) 取得了长足的进步。凭借其前所未有的规模和能力,GPT-4为语言 AI​​设立了新标准,并为机…

vue-pc端实现按钮防抖处理-自定义指令

前言 我们经常在移动端会处理按钮和输入框的防抖和节流处理,在pc端很少进行这样的操作 但是在pc端也是可以进行按钮的防抖操作,这样也是比较合理,可以不用但不可以不会 我们只要配合vue项目自定义指令加上全局注册,就可以实现按…

Linux下安装VMware虚拟机

目录 1. 简介 2. 工具/原料 2.1. 下载VMware 2.2. 安装 1. 简介 ​ VMware Workstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 …

同步代码块使用错误示范 | 用了synchronized还是出现“超取”问题

记录一下错误,吸取经验🤔😋 出问题的代码 public class Test {public static void main(String[] args) {new Thread(new Account()).start(); //!!new Thread(new Account()).start(); //!!}…

跨境电商线上店铺智能装修系统源码开发

搭建一个跨境电商线上店铺智能装修系统源码开发需要以下步骤: 1. 确定需求:首先,需要明确线上店铺智能装修系统的具体需求。 2. 选择开发语言和框架:根据需求,选择合适的开发语言和框架进行开发,可以提高…

docker容器监控:Cadvisor+InfluxDB+Grafana的安装部署

目录 CadvisorInfluxDBGrafan安装部署 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 5、创建influxdb容器 6、创建Cadvisor 容器 7、查看Cadvisor 容器: (1)准备测试镜像 (2)通…

【TypeScript】中关于 { 声明合并 } 的使用及注意事项

概念: 在TS中,如果定义了多个相同命名的函数,接口或者class 类,那么它们会自动合并成一个类型 函数的合并: 前面章节讲解的函数重载就是使用了定义多个函数的类型进行合并: function reverse(x: number):…

MPP架构和Hadoop架构的区别

1. 架构的介绍 mpp架构是将许多数据库通过网络连接起来,相当于将一个个垂直系统横向连接,形成一个统一对外的服务的分布式数据库系统。每个节点由一个单机数据库系统独立管理和操作该物理机上的的所有资源(CPU,内存等&#xff09…

MySQL索引1——索引基本概念与索引结构(B树、R树、Hash等)

目录 索引(INDEX)基本概念 索引结构分类 BTree树索引结构 Hash索引结构 Full-Text索引 R-Tree索引 索引(INDEX)基本概念 什么是索引 索引是帮助MySQL高效获取数据的有序数据结构 为数据库表中的某些列创建索引,就是对数据库表中某些列的值通过不同的数据结…

桶排序算法

桶排序算法 算法思想概述:桶排序的主要步骤如下: 算法goland实现:图解演示: 算法思想概述: 桶排序(Bucket Sort)是一种非比较性的排序算法,它将待排序的元素分到有限数量的桶&#…

Gitee+Jenkins(docker版)自动推送并部署Springboot项目到远程服务器

如果要参考gitlab配置请参考GitlabWebhook自动推送并更新Springboot项目 Gitlab的配置部分 环境介绍 Jenkins服务器(Centos7.6): docker安装的jenkins,参考Jenkins(docker安装)部署Springboot项目JDK1.8Maven3.6.3 注意docker安装的jenkins,而且是较新的版本,所以jenkins容器…

php获取随机订单号(封装函数)

作为一个开发人员,生成订单时常常需要获取一段随机码来表示订单号,并且订单号一般包含的特定的时间日期等信息,临时现写一个比较浪费时间,这里有一个封装好的生成随机订单号的函数,需要时直接调用即可。 代码如下&…

AtcoderABC224场

A - TiresA - Tires 题目大意 题目要求判断给定字符串S的末尾是以"er"还是"ist"结尾,并输出对应的结果。 思路分析 使用substr函数获取字符串S的末尾2个字符或3个字符。 判断获取到的子字符串是否等于"er"或"ist"&#…

利用NtDuplicateObject进行Dump

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。(本文仅用于交流学习) 这是国外老哥2020年提出的一种蛮有意思的思路。 我们先来看看大致的思路是…

java Spring Boot yml多环境配置

我们项目 线上和线下 环境配置不是特别一样 例如 运行的URL 数据库地址 数据库的账号密码 这些经常是不一样的 如果每次上线钱改 也不是特别方便 甚至可能忘记 那么 进入我们代码中 所谓的多环境 就是在不同的环境下配置不同的值 终端还是在application配置文件中 多环境的话…

【Linux】云服务器自动化部署VuePress博客(Jenkins)

前言 博主此前是将博客部署在 Github Pages(基于 Github Action)和 Vercel 上的,但是这两种部署方式对于国内用户很不友好,访问速度堪忧。因此将博客迁移到自己的云服务器上,并且基于 Jenkins(一款开源持续…

【C语言】经典题目(四)

HI,大家好~😝😝这是一篇C语言经典题目的博客。 更多C语言经典题目及刷题篇,可以参考: 🌸 【C语言】经典题目(一) 🌸 【C语言】经典题目(二) 🌸 【C语言】经典题目(三) 🌸…

k8s dns 解析service异常

查看kube-dns日志 for p in $(kubectl get pods --namespacekube-system -l k8s-appkube-dns -o name); \ do kubectl logs --namespacekube-system $p; done k8s教程(service篇)-总结_阿甘兄的技术博客_51CTO博客

兰州https证书申请

https证书是由CA认证机构颁发的数字证书,可以为域名网站或者公网IP网站提供信息加密服务,正规CA认证机构签发的https证书可以兼容99%的主流浏览器和IOS、Windows系统,同样,现在流行的小程序也需要https证书。那么,该怎…

Beautiful Sequence 2023牛客暑期多校训练营7 C

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;给出一长度n-1的数组b&#xff0c;要求构造一个长度为n的数组a&#xff0c;满足a[i]^a[i1]b[i]&#xff0c;a[i]<a[i1]&#xff0c;求字典序第k小的数组 1<n<1e6;0<a[i],b[i]< 思路&#xff1a;因为…