深入理解MySQL 的 索引

ops/2025/2/1 21:14:46/

索引是一种用来快速检索数据的一种结构, 索引使用的好不好关系到对应的数据库性能方面, 这篇文章我们就来详细的介绍一下数据库的索引。

1. 页面的大小: B+ 树索引是一种 Key-Value 结构,通过 Key 可以快速查找到对应的 Value。B+ 树索引由根页面(Root)、分支页面(Branch)和叶子页面(Leaf)组成一棵树的结构。InnoDB 中,索引页面的大小由参数 innodb_page_size 控制,默认为 16K。

在这里插入图片描述

2. 行的大小: innoDB 对行的长度有一定的限制,每行记录的长度不能超过页面大小的一半。对于 16K 的页面大小,1 行记录最长大概在 8000 字节多一点。如果 1 行记录平均长度为 200 字节,那么一个页面最多可以容纳八十多行记录

3. key, value:

  • 在分支页面中,Value 存了下一层索引页面的编号(Page No),页面编号就是页面在数据文件中的地址。
  • 而在叶子页面中,Value 又是什么呢?
    对于 InnoDB 的二级索引,你可以认为叶子页面中不存 Value,
    而对于聚簇索引,Value 是表里面的所有字段。
type keyValue struct {t uint8 //表示对应的类型key any // 表示对应的keyvalue any // 表示存储的值, 
}

我们先看一下面这段SQL 代码:

create table t_user(id int not null,username varchar(30),email varchar(128),phone varchar(15),login_time datetime,key idx_username(username),primary key(id)
);

在innodb 中,表中的数据是按照对应的聚簇索引的形式来进行存储的, 聚簇索引的key 字段为表结构中的 primary key 指定的字段, 如果不指定对应的字段, 则会以非空的唯一索引作为Primary key, 活着对应的innodb 自动生成一个隐藏的字段作为 Primary key

在上面中我指定了对应的 primary key 为对应的 id 字段, 所以Id 就作为对应的默认索引,


http://www.ppmy.cn/ops/154859.html

相关文章

【数据结构】(2)时间、空间复杂度

一、衡量算法好坏的指标 时间复杂度衡量算法的运行速度,空间复杂度衡量算法所需的额外空间。这些指标,是某场景中选择使用哪种数据结构和算法的依据。如今,计算机的存储器已经变得容易获得,所以不再太关注空间复杂度。 二、渐进表…

Vue 封装http 请求

封装message 提示 Message.js import { ElMessage } from "element-plus";const showMessage (msg,callback,type)>{ElMessage({message: msg,type: type,duration: 3000,onClose:()>{if (callback) {callback();}}}); }const message {error: (msg,…

Python | Pytorch | 什么是 Inplace Operation(就地操作)?

如是我闻: 在 PyTorch 中,Inplace Operation(就地操作)是指直接修改 Tensor 本身,而不是创建新的 Tensor 的操作。PyTorch 中的 Inplace 操作通常会在函数名后加上 _ 作为后缀,例如: tensor.ad…

12 款开源OCR发 PDF 识别框架

2024 年 12 款开源文档解析框架的选型对比评测:PDF解析、OCR识别功能解读、应用场景分析及优缺点比较 这是该系列的第二篇文章,聚焦于智能文档处理(特别是 PDF 解析)。无论是在模型预训练的数据收集阶段,还是基于 RAG…

Redis地理散列GeoHash

GeoHash是一种用于地理位置编码的算法,将二维的地理坐标(纬度和经度)转换为一维的字符串表示,从而实现对地理位置的高效存储和查询。Redis作为一个内存数据库,提供了对GeoHash的支持,使得地理位置相关的数据…

【16届蓝桥杯寒假刷题营】第2期DAY5

5.变变数组 - 蓝桥云课 给定一个长度为 n 的整数数组 A,A 中第 i 个元素为 Ai​(1≤i≤n),你只能在 A 中选择一个元素 a,将 A 中所有数值等于 a 的元素变为 a2,请问变化后 A 中所有元素和的最大为多少。 …

软件工程概论试题一

一、单选 1.下面关于“发布测试”的观点错误的是( )。 A.系统开发团队不应该负责发布测试 B.发布测试是一个确认检查的过程 C.发布测试的目的是让系统供应商确信系统足够好可以使用了 D.发布测试通常采用白盒测试 正答:D 2.下图最有可能是()体系结构风格。 A. C…

PID 温控设计(基于 STC51)

PID 温控设计(基于 STC51) 一、需求分析 开关型控制存在的问题:加热的过程是全功率加热,三极管发热量大,温度控制振荡幅度大,控制精度较低。而通过采用PID方法能够更加精确地控制加热片处于目标温度&…