代码编织梦想

数据库索引

索引是为了提高数据的查询速度,相当于给数据进行编号,在查找数据的时候就可以通过编号快速找到对应的数据。

索引内部数据结构:B + Tree

主键自带索引。 如:

insert into user (id, name) values (1,'f');
insert into user (id, name) values (5,'h');
insert into user (id, name) values (2,'d');
insert into user (id, name) values (6,'c');
insert into user (id, name) values (3,'e');
insert into user (id, name) values (4,'a');
insert into user (id, name) values (8,'g');
insert into user (id, name) values (7,'b');

在这里插入图片描述

乱序插入数据,会自动按照 id 进行升序排列,这是因为主键自带索引。

数据存储的内部结构类似于链表的形式,通过指针关联不同的数据。

在这里插入图片描述

这种结构当数据量很大的时候查询还是很慢,MySQL是如何解决的?

MySQL中有一个 page 的概念,相当于给数据进行分页,把一部分数据存入一个 page 中。

如下图所示:

在这里插入图片描述

每个 page 可以存储 16KB 的数据,这样就相当于给数据建立了上层目录。先找大目录,再找具体的数据。

MySQL给 page 也提供了快速查询的 page目录,如下所示:

在这里插入图片描述

把每个 page 中的第一条数据id+指针 存入 page目录 中,查询数据的时候,先找到它的 page。再进入到相应 page 里面查询具体的数据。

如:查询出 id=4 的数据,因为3 < 4 < 5,所以根据 page 目录可以判断在 page2 中,然后在 page2 中查询具体的数据。

一个 page目录 也可以存储 16KB 的数据,如果是海量数据,page目录也会有很多层。

为了提高查询效率,MySQL给 page目录 再加上一次目录,如下所示:

在这里插入图片描述

这种结构就是 B+树

假设一条记录的空间为32个byte,最底层一个单元可以存储数据 16*1024/32=512

第二层只需要记录 id+p,假设是6个byte,则可以保存的数据是 16*1024/6=2730

第三次存储的数据是 16*1024/6=2730

总共可以存储的数据是 512 * 2730 * 2730=38亿(约等于)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/code__bee/article/details/144054350

狂神Java学习笔记————MySQL(五)————事务,索引,用户管理,数据库备份和规范数据库数据(三大范式)-爱代码爱编程

事务 要么都成功,要么都失败(类似try代码块?) 一一一一一一一一一一一一一 A给B转账 SQL1 A账面转出 SQL2 B账面收到 一一一一一一一一一一一一一 若SQL2执行时或执行前出现错误,则SQL1也不生效,否则,A账面白白减少。事务原则:ACID原则:原子性,一致性,隔离性,持久性(脏读,幻读) 原子性:对于一个事务中的多个动作,要么都

MySQL 学习笔记一——MySQL简介-爱代码爱编程

MySQL 学习笔记一——MySQL简介 关系型数据库管理系统 RDBMS(Relational Database Management System)特点相关术语 关系型数据库管理系统 RDBMS(Relational Database Management System) 转载于MySQL 特点 数据以标哥形式出现每行为各种记录名称每

MySQL 学习笔记——索引-爱代码爱编程

索引简介 索引是帮助 MySQL 高效获取数据的数据结构,一般存储在磁盘的文件中 索引优缺点 优点 提高数据查询的效率,降低数据库的 IO 开销通过索引列对数据进行排序,降低数据排序的成本,降低了 CPU 的消耗缺点 索引需占用一定的磁盘空间 索引会降低更新表的效率,如对表进行增删改时,需要同时对索引文件进行维护 索引结构 MySQL 的索

mysql学习笔记5——函数和索引_mysql 函数索引-爱代码爱编程

函数和索引 一、函数1、数学函数2、字符串函数3、条件判断函数 二、索引1、索引是什么2、单字段索引3、组合索引4、总结 一、函数 MySQL提供了很多功能强大,而且使用起来非常方便的函

241124_基于mindspore学习prompt tuning-爱代码爱编程

241124_基于MindSpore学习Prompt Tuning 传统的NLP训练模式都是先在大量的无标注的样本上进行预训练,然后再使用有标注的样本进行有监督的训练,调整单一的线性成果而不是整个模型。 但在实际训练中发

路径平滑、轨迹优化、二次规划、五次多项式学习_路径规划二次折线优化-爱代码爱编程

Apollo参考下优化平滑代码解读 三次、五次多项式可以插值也可以拟合。 三次多项式是输入起点,终点位置和速度求解。五次多一个加速度。 插值就是知道了起点,终点等信息,解出多项式函数后,可以采样定义域内的自变量来获得起点,

学习嵩山版《java 开发手册》:编程规约 -爱代码爱编程

概述 《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,他旨在提升开发效率和代码质量 《Java 开发手册》是一本极具价值的 Java 开发规范指南,对于提升开发者的综合素质和代码质量具有重要意义

python基础学习-爱代码爱编程

1、"值传递” 和“引用传递” 1)不可变的参数通过“值传递”。比如整数、字符串等 2)可变的参数通过“引用参数”。比如列表、字典。 3)避免可变参数的修改 4)内存模型简介 2、函数参数类型 1) def func() #无参数函数 2) def func(value1, value2) #有参数函数;位置参数 3) def func(name

学习笔记 —— mysql基础-爱代码爱编程

SQL通用语法 DDL 语法(数据库和表管理) 数据库管理 SHOW DATABASES; 查询所有数据库SELECT DATABASE(); 查询当前数据库(与use对应)CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排列规则]; 创建一个新的数据库,字符集推

mysql笔记——索引_mysql索引 黑马-爱代码爱编程

索引 SQL性能分析使用原则SQL提示覆盖索引前缀索引单列索引和联合索引索引设计原则 学习黑马MySQL课程,记录笔记,用于复习。 查询建表语句: show create table

mysql学习笔记——创建索引_mysql 创建索引并注释-爱代码爱编程

文章目录 一、创建索引二、查看索引三、删除索引案例name字段为姓名字段,该字段的值可能重复,为该字段创建索引phone手机号字段的值,是非空,其唯一的,为该字段创建索引为profession、age、stat

学习笔记033——mysql数据库学习笔记-爱代码爱编程

文章目录 1、MySQL 概述1.1 什么是数据库?1.2 什么是 MySQL?1.3 学习数据库需要掌握两部分内容 2、MySQL 的使用3、数据库存储引擎4、SQL 分类5、创建数据库6、MySQL