mysql进阶-索引基础

目录

1. 概念-索引是什么?

2. 索引的数据结构(索引模型)

2.1 二分查找:

2.2 二叉查找树(BST Binary Search Tree):

2.3 平衡二叉树(AVL Tree Balanced binary search trees)

2.4 多路平衡查找树(B Tree Balanced Tree)

2.5 加强版多路平衡查找树(B+ Tree)

3. innodb如何存储索引和数据的?

3.1 索引分类

3.2 索引如何存储数据

4. 注意事项


1. 概念-索引是什么?

索引相当于一本书籍的目录,它是帮助数据库快速检索数据的一种数据结构。

维基百科的定义

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中的数据。

索引的简单示例图:

索引的好处就是查询更快。比较如下:

没有索引:查询数据时只能从磁盘中按顺序读取数据,直到找到所需要的数据。

有索引:从索引中找到数据存储的位置,然后直接从磁盘位置读取数据。

2. 索引的数据结构(索引模型)

索引的数据结构是B+Tree树。

比较一下相关的数据结构的优缺点:

2.1 二分查找:

优点:针对于有序数组,等值查询和比较查询的效率非常高。

缺点:更新数据可能需要挪动大量的数据。

适用场景:静态存储的数据。

2.2 二叉查找树(BST Binary Search Tree):

示例图:

特点:左子树所有的节点都小于父节点,右子树所有的节点都大于父节点。

优点:既能实现快速查找,又能够实现快速插入

缺点:查询耗时和这棵树的深度相关。假设我们的数据构成二叉查找树后,正好是一棵斜树,那么就和顺序查找的效率是一样的。

2.3 平衡二叉树(AVL Tree Balanced binary search trees)

定义:左右子树深度差绝对值不能超过1.

如何平衡:AVL树在插入和更新数据的时执行了1系列的计算和操作(左旋、右旋)来保证树的平衡。

存储特点:每个节点需要存储键值、数据磁盘地址、子节点引用

优点:解决了二叉查找树极端的斜树情况。

缺点:每个节点存储的数据太少,如果数据较多,树的深度依然很大。

2.4 多路平衡查找树(B Tree Balanced Tree)

示例图:

特点:分叉数永远比关键字数多1

如何平衡:分裂和合并

2.5 加强版多路平衡查找树(B+ Tree)

示例图:(图片来源于百度图片)

特点:1.关键字数和路数相等 2. B+Tree的根节点和枝节点中都不存储数据,只有叶子节点才存储数据。

优势:

        1. 扫库、扫表能力更强

         2. B+ Tree 的磁盘读写能力更强

        3.排序能力更强

        4. 效率更加稳定(B+Tree永远是在叶子节点拿到数据,所以IO次数是稳定的)。

3. innodb如何存储索引和数据的?

在innodb中索引即数据。

3.1 索引分类

聚集索引:索引键值的逻辑顺序和表数据据行的物流存储顺序是一致的。

二级索引(辅助索引):如果表有主键,那么主键索引就是聚集索引,其他的索引统一叫二级索引。

3.2 索引如何存储数据

主键索引存储了所有的数据。

二级索引并不会把完整记录在叶子节点放一份,因为这会带来额外的存储空间和计算浪费。二级索引的叶子节点存的是这条记录对应的主键的值。如果需要拿除索引和主键之外的值,需要再到主键索引的叶子节点拿到数据(这就是回表的概念)。

示例图:(图片来源于百度图片)

4. 注意事项

1.不要在频繁更新的列上建索引,因为会引起分裂和合并

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

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

相关文章

墙地砖外形检测的技术方案-技术方案概述

技术方案概述 墙地砖检测内容包括:轮廓尺寸、边直度和直角度特征。检测墙地砖检测系统的技术路线如图所示,包括的处理模块有:图像获取、图像复原、图像增强、图像分割、外部检测算法。下面分别讲解这个处理模块的作用。 墙地砖检测的技术路线…

WorkPlus企业打破信息孤岛,构建统一工作平台的首选之一

在当今数字化时代,企业内部存在着繁多的工作应用和系统。要实现高效的工作协作,企业需要一个统一的工作平台来打破信息孤岛,提升协作效率。作为一家领先的企业统一工作平台,WorkPlus以其卓越的性能和专业的功能,助力企…

线性调频信号的解线调(dechirp,去斜)处理matlab仿真

线性调频信号的解线调 线性调频信号的回波模型参考信号去斜处理去斜处理傅里叶变换得到脉压结果解线调仿真总结 线性调频信号的回波模型 对于线性调频脉冲压缩雷达,其发射信号为: s ( t ) r e c t ( t T ) e x p ( j π μ t 2 ) \begin{equation} s(…

mac vscode latex实用

网上有教程怎么在vscode里安装macTex以及插件,然后就可以在latex里写代码了,这里需要修改的是对应的json文件,输入command P,可以看到最近打开的json设置文件,结果如下 然后设置这个json文件,我的json文件设置如下 …

基于SSM的网上订餐管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

C语言经典算法之直接排序算法

目录 前言 一、代码实现 二、时空复杂度 时间复杂度: 空间复杂度: 前言 建议:1.学习算法最重要的是理解算法的每一步,而不是记住算法。 2.建议读者学习算法的时候,自己手动一步一步地运行算法。 tips:希尔排序算…

大数据 - Kafka系列《一》- Kafka基本概念

目录 🐶1.1 什么是kafka 🐶1.2 Kafka可以用来做什么 🐶1.3 kafka的特点 🥙1. 高吞吐量、低延迟 🥙2. 可扩展性 🥙3. 持久性、可靠性 🥙4. 容错性 🥙5. 高并发 &#x1f436…

【Maven】001-Maven 概述

【Maven】001-Maven 概述 文章目录 【Maven】001-Maven 概述一、Maven 概述1、为什么学习 MavenMaven 作为依赖管理工具Maven 作为构建工具其它 2、Maven 介绍3、Maven 软件工作模型图 一、Maven 概述 1、为什么学习 Maven Maven 作为依赖管理工具 依赖管理: Mave…

python tcp socket中实现SSL/TLS认证

SSL/TLS介绍 官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。 说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信息传输的安全。如HTTP协议是明文传输…

git常用命令集合及其演示

文章目录 一.git常用命令集合及其演示1.git config --list 查看配置信息2.git status 查看当前仓库的状态3.git add . 加到暂存区4.git commit -m "描述信息" 添加到版本库5.git diff xxxx 查看xxxx文件修改了哪些内容,相比于暂存区的区别6.git rm --cach…

linux Tcp总结

Tcp连接建立时的影响因素 在Client发出SYN后,如果过了1秒 ,还没有收到Server的响应,那么就会进行第一次重传;如果经过2s的时间还没有收到Server的响应,就会进行第二次重传;一直重传tcp_syn_retries次。 对…

Python3.10安装教程

Python3.10安装 Python的安装按照下面几步进行即可,比较简单。 下载Python安装文件,打开Python的下载页面,我这里选择安装的版本是3.10.11,根据自己电脑版本选择对应安装包 安装包下载完毕后,按照步骤开始安装。选择…

微信小程序rsa加密

没有使用npm下载依赖的方式,直接引入了rsa.js文件,rsa.js文件在后面,目录结构如下: 在index.js文件引用 import { proxyInstance, backendUrl } from ../../util/request.js; import JSEncrypt from ./rsa.js const key -----BE…

数据模型/数据建模的含义

我们可以从以下四个方面来了解 (1)、业务模型 (2)、构建表关系/表链接 (3)、数学模型 (4)、算法模型 业务模型 建立业务模型的重点是懂业务,即了解业务的整个过…

探寻闲鱼SellerId加解密算法

最近一直在研究闲鱼的加密算法,无他,因为阿里的加密可以算是天花板级别的,研究和学习起来才值得。 很多人可能发现了,通过抓包得到的闲鱼数据包,sellerId等等值是加密过的。这就导致了很多人通过抓包或者协议请求得到…

qt图形化界面开发DAY2

作业: 1> 思维导图 2> 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否…

第 5 课 编写简单的发布器 Publisher

文章目录 第 5 课 编写简单的发布器 Publisher 第 5 课 编写简单的发布器 Publisher 本节以创建一个velocity_publisher.py的(发布者)节点为例进行讲解。 输入指令“roscd beginner_hiwonder”,回车。进入beginner_hiwonder软件包。 roscd…

数据结构(c)冒泡排序

本文除了最下面的代码是我写的,其余是网上抄写的。 冒泡排序 什么是冒泡排序? 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交…

JAVA开发入门

文章目录 计算机基本概念DOS常用命令JAVA语言发展史JDK下载JAVA体系与特点JDK安装JAVA环境变量配置 计算机基本概念 计算机组成原理 计算机组装 计算机:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子…

如何申请IP地址证书

什么是IP地址证书? IP地址证书是一种用于验证网站服务器身份的数字证书,它可以确保网站与用户之间的通信安全。与传统的域名证书不同,IP地址证书直接针对服务器的IP地址进行认证,适用于没有独立域名的网站或需要对多个域名进行统…