MySQL中索引的数据结构

2.3.1. 索引数据结构

索引就是能够提高查询速度的一种数据结构,在数据插入时就进行了排序(会影响插入和更新的性能),索引广泛使用的是B+树索引

B+树索引结构:

目前是基于磁盘排序效率最高的数据结构,树非常矮通常3~4层所以访问效率高,查询一条数据只用三到四次I/O,可以存放千万到亿的排序数据。

B+ 树索引由根节点(root node)、中间节点(non leaf node)、叶子节点(leaf node)组成,叶子节点存放所有排序后的数据。B+树高度为1,就只有一个页既是根节点也是叶子节点。随着插入 B+ 树索引的记录变多,1个页(16K)无法存放这么多数据,会发生 B+ 树的分裂,B+ 树的高度变为 2,当 B+ 树的高度大于等于 2 时,根节点和中间节点存放的是索引键对,由(索引键、指针)组成。

索引键就是排序的列,而指针是指向下一层的地址,在 MySQL 的 InnoDB 存储引擎中占用 6 个字节。下图显示了 B+ 树高度为 2 时,B+ 树索引的样子:

若要查询索引键值为 5 的记录,先查找根节点,查到键值对(20,地址),表示小于 20 的记录在地址指向的下一层叶子节点中。根据下一层地址就可以找到最左边的叶子节点,在叶子节点中根据二叉查找就能找到索引键值为 5 的记录。

优化B+树索引的插入性能:

B+ 树在插入时就对要对数据进行排序,但排序的开销并没有那么大,排序是 CPU 操作(当前一个时钟周期 CPU 能处理上亿指令)。

真正的开销在于 B+ 树索引的维护,保证数据排序,这里存在两种不同数据类型的插入情况

  • 数据顺序(或逆序)插入: B+ 树索引的维护代价非常小,叶子节点都是从左往右进行插入,比较典型的是自增 ID 的插入、时间的插入(在自增 ID 上,时间等具有顺序的列上创建索引,则 B+ 树插入通常是比较快的)。
  • 数据无序插入: B+ 树为了维护排序,需要对页进行分裂、旋转等开销较大的操作,另外,即便对于固态硬盘,随机写的性能也不如顺序写,所以磁盘性能也会收到较大影响。比较典型的是用户昵称,每个用户注册时,昵称是随意取的,在昵称上创建索引,插入是无序的,索引维护需要的开销会比较大。

对于 B+ 树索引,在 MySQL 数据库设计中,仅要求主键的索引设计为顺序,比如使用自增,或使用函数 UUID_TO_BIN 排序的 UUID,而不用无序值做主键。

UUID 由于是无序值,在插入时性能比起顺序值自增 ID 和排序 UUID,性能上差距比较明显。

在表结构设计时,主键的设计一定要尽可能地使用顺序值,这样才能保证在海量并发业务场景下的性能。

MySQL 单表的索引没有个数限制,根据业务查询的具体需求创建即可,不要迷信个数限制;

在真正业务上可能会创建一些低效的索引,优化器根本不会使用这些无效索引占用了空间,又影响了插入的性能,真正避免的是这种情况。

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

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

相关文章

Python 2 and3 兼容性问题的工具库之six使用详解

概要 在 Python 社区中,随着 Python 2 的逐渐退出舞台,许多项目需要同时兼容 Python 2 和 Python 3。为了简化这一任务,Python 社区开发了一个名为 six 的工具库,它提供了一组函数和工具,使得编写兼容 Python 2 和 Py…

Pandas Series的运算原来这么简单

Series的运算主要包括加法、减法、乘法和除法等基本算术运算。这些运算通常是按照索引对应计算的,如果两个Series的索引不同,则结果中对应位置将填充为NaN(空值)。 需要注意的是,在进行Series运算时,需要确…

文心一言 VS 讯飞星火 VS chatgpt (249)-- 算法导论18.2 2题

二、请解释在什么情况下(如果有的话),在调用 B-TREE-INSERT 的过程中,会执行冗余的 DISK-READ 或 DISK-WRITE 操作。(所谓冗余的 DISK-READ ,是指对已经在主存中的某页做 DISK-READ 。冗余的 DISK-WRITE 是…

探索APP内测分发的全过程(APP开发)

什么是APP内测分发探索APP内测分发的全过程? APP内测分发是在应用程序开发过程中探索APP内测分发的全过程,开发者将应用程序的测试版或预发布版分发给特定用户进行测试、反馈和评估的一种方式。这是一个非常重要的环节,可以有效地提高应用的…

C语言——每日一题(反转链表)

一.前言 大家好!今天又是每日一题环节。今天我为大家分享了一道单链表题——反转链表。 废话不多说,让我们直接进入正题吧。 二.正文 1.1题目信息 这是一道leetCode上面的一道题:https://leetcode.cn/problems/reverse-linked-list 1.2解…

227. 基本计算器 II

227. 基本计算器 II 原题链接:完成情况:解题思路:参考代码:_227基本计算器II_单栈直接算_227基本计算器II_双栈 错误经验吸取 原题链接: 227. 基本计算器 II https://leetcode.cn/problems/basic-calculator-ii/ 完…

网络应用层之(6)L2TP协议详解

网络应用层之(6)L2TP协议 Author: Once Day Date: 2024年5月1日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文档可参考专栏:通信网络技术_Once-Day的…

[论文阅读] (32)南洋理工大学刘杨教授——网络空间安全和AIGC整合之道学习笔记及强推(InForSec)

首先祝大家五一节快乐!《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给…

安卓四大组件之ContentProvider

目录 前言一、ContentProvider基础介绍1.1 简介1.2 作用1.3 实现原理 二、具体使用2.1 统一资源标识符(URI)2.2 MIME数据类型2.2.1 MIME类型组成2.2.2 常见的MIME类型2.2.3 ContentProvider根据 URI 返回MIME类型2.2.4 类型分类2.2.5 示例 2.3 ContentPr…

Java IO流(一)

1. IO流概述 1.1 什么是IO流 在计算机中,input/output(I/O、i/o 或非正式的 io 或 IO)是信息处理系统(例如计算机)与外界(可能是人类或其他信息处理系统)之间的通信。 输入是系统接收到的信号或…

基于ssm+vue+Mysql的药源购物网站

开发语言:Java框架:ssmJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.…

Ubuntu系统设置中文及中文输入法(手把手,学不会打我)

前言 最近开始搞C系统编程的学习,整了个Ubuntu系统,进去发现是英文系统,我一开始觉得也能接受,就当练英文,反正那些命令也都是用英文,不过后面等我暗转了一个Chrome并且开始用这里的软件去搜问题时&#x…

【08】JAVASE-面向对象-类和对象【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture:波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。…

Linux:冯诺依曼体系结构、操作系统、初识进程

文章目录 1.冯诺依曼体系结构总线与数据传输通路为什么有内存这个部分计算机存储结构 2.操作系统(Operator System)2.1 概念2.2 设计OS的目的2.3 理解“管理”先描述再组织 2.4 用户使用系统调用和库函数(lib)概念 总结 3.初识进程3.1 基本事实与引入3.2…

(1)探索 SpringAI - 基本概述

人工智能简介 A system is ability to correctly interpret external data, to learn from such data, and to use those learnings to achieve specific goals and tasks through flexible adaptation. 翻译:系统正确解释外部数据的能力,从这些数据中学…

飞腾D2000+X100 TYPE6全国产核心板

飞腾D2000X100 TYPE6核心板 产品概述 飞腾D2000X100 TYPE6核心板为增强型自主控制器核心板,其核心芯片CPU采用飞腾D2000/8核工业版CPU、飞腾桥片X100、双通道DDR4L插槽、PHY芯片等。 产品特点 l 基于飞腾D2000X100桥片 l 丰富的PCIE扩展资源,一路PCIE…

大面积车间降温用什么方法

生产车间降温用什么设备好,生产车间降温设备的选择取决于多种因素,如车间的大小、高度、通风条件、预算以及员工的工作环境需求等。以下是一些常见的生产车间降温设备及其特点: 工业风扇(包括大型吊扇): …

街道征迁项目档案管理系统

街道征迁项目档案管理系统是一个用于管理街道征迁项目档案的软件系统。该系统的主要功能包括档案录入、档案存储、档案检索、档案共享等。 系统的用户可以通过该系统录入征迁项目相关的档案信息,包括项目名称、征迁范围、土地面积、征迁补偿费用等。同时&#xff0c…

el-table分页多选导出excel表格

需求:使用el-table分页查询表格的时候记录上一页已选中的数据,之后点击导出按钮后对表格已选中数据导出excel表格,导出成功后清空选中的状态,本文章只记录分页导出的关键代码,其中包含之前的导出全部表格,导…

2024五一数学建模C题Python代码+结果表数据教学

2024五一数学建模竞赛(五一赛)C题保姆级分析完整思路代码数据教学 C题 煤矿深部开采冲击地压危险预测 第一问 导入数据 以下仅展示部分,完整版看文末的文章 import numpy as np import pandas as pd import matplotlib.pyplot as plt imp…