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

深入理解MySQL 的 索引

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

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 // 表示对应的key
	value 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.kler.cn/a/526898.html

相关文章:

  • 51单片机CLD1602显示万年历+闹钟+农历+整点报时
  • 浅谈AI的发展对IT行业的影响
  • 「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)
  • S4 HANA明确税金本币和外币之间转换汇率确定(OBC8)
  • 策略梯度 (Policy Gradient):直接优化策略的强化学习方法
  • vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列
  • java的Stream流
  • Redis入门概述
  • 嵌入式知识点总结 Linux驱动 (七)-Linux驱动常用函数 uboot命令 bootcmd bootargs get_part env_get
  • 计算机图形学 通过叉乘判断一个点是否在三角形内
  • Java进阶six junit单元测试,反射,注解,动态代理
  • OVS-DPDK
  • 具身智能体空间感知基础!ROBOSPATIAL:评测并增强2D和3D视觉语言模型空间理解水平
  • 低代码产品表单渲染架构
  • 【计算机网络】设备更换地区后无法访问云服务器问题
  • 【华为OD-E卷 - 数组二叉树 100分(python、java、c++、js、c)】
  • Mybatis框架中的foreach标签解析
  • 【4Day创客实践入门教程】Day2 探秘微控制器——单片机与MicroPython初步
  • SQL进阶实战技巧:如何分析浏览到下单各步骤转化率及流失用户数?
  • 【C++语言】卡码网语言基础课系列----7. 摆平积木
  • Learning Vue 读书笔记 Chapter 4
  • DDD - 领域事件_解耦微服务的关键
  • char和varchar的区别、varchar(?)中问号部分的含义、索引的作用
  • 使用Pygame制作“俄罗斯方块”游戏
  • Spring Boot项目如何使用MyBatis实现分页查询及其相关原理
  • AJAX案例——图片上传个人信息操作