MySql 数据索引

article/2025/11/3 11:29:25

索引:实质上是一种排好序数据结构

B-tree:

叶子节点具有相同的深度,叶节点的指针为空

所有索引元素不重复

节点中的数据索引从左到右递增排列

B+tree:

非叶子几点不存储data,只存储索引;

叶子节点中包含所有的索引字段;

叶子节点用指针链接,提升区间访问性能;

分析两种树结构有什么不同?

1.b-tree中叶子每个节点上都有数据,而b+tree上只有叶子节点有数据。

2.b-tree中叶子叶子节点上是没有枝干节点上的数据的,b+tree树上是有枝干上的数据的。

为什么Mysql数据库使用的是b+tree而不是b-tree呢?

mysql中定义索引是有页数存储的,每一页大小默认16k,b+tree中只存了索引没有存data,数据量小,所以在通层数中的数据存储量远远高于b-tree,搜索效率更快。

注意:

页上面是双线链表结构,

聚集索引:索引和数据在同一文件中

非聚集索引:索引和数据不在同一文件中

 上面图中主键和名称索引就是innodbB+tree结构索引,为主键索引是聚集索引,名称索引里面存储的data是主键,查询的时候需要先定位到主键,然后再通过聚集索引查询完整数据。

后面的是MyISAM索引,但是因为是通过地址查询,不支持事务,所以Mysql中表索引一般不建议使用MyISAM。

B+tree 和 Hash 结构,理论上Hash查询速度可能更快,但是Hash不支持范围查询,所以不适用Hash。

为什么InnoDB索引推荐创建一个自增主键?

在查询非自增主键的时候可能会导致,索引树分裂并且重新平衡,影响速率。

联合索引数据结构是怎么样的?

name_age_sex,先比较左边的name,再比较中间的age,最后比较右面的sex,这就是最左前缀原理。

总结:

一个sql能不能使用索引,简单的来说就是看查询来的数据能不能符合索引的顺序结构。如果查询数据违背顺序,就不会使用索引,但是mysql使不使用索引,还是要有mysql决定的,里面有个计算cost成本的算法,举个例子,如果数据量少,mysql可能就会全表扫描,他会认为全表扫描的时候成本更低,所以可能不会使用索引,因为非主键索引可能会回表查询。


http://chatgpt.dhexx.cn/article/qTCYKMtj.shtml

相关文章

MySQL数据库索引和事务详解

目录 前言: 索引 查看索引 创建索引 删除索引 索引使用 底层数据结构分析 事务 事务引出 MySQL设计事务 事务四大特性 小结: 前言: 数据库索引和事务的存在,对于数据库的一些性能有了显著提升。我们需掌握其底层的实现…

MySql数据库索引原理

本文主要是阐述mysql索引机制,主要是说明存储引擎Innodb 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。 第二部分结合MySQL数据库中InnoDB数据存储引擎中索引的架构实现讨论聚集索引、非聚集索引及覆盖索引等话题。 第三部分讨论MySQL中高性…

数据库(mysql)之索引

目录 一、索引概念 2、索引优点和缺点 1、优点 2、缺点 3、创建索引的原则依据 二、索引的分类和创建 1、普通索引(标志MUL) 1、直接创建索引 2、修改表结构的方式创建索引 3、创建表的时候指定索引 2、唯一索引(标志NUI&#x…

【MySQL数据库】----MySQL的索引

目录 1.初识MySQL索引 2.索引的劣势 3.和索引相关的一些sql 4.索引背后的数据结构 4.1HashTable 4.2.顺序表和链表 4.3.二叉搜索树 4.4.AVL树 5.B树 5.1B树的优势和劣势 6.B树(升级版B树) 7.量身定做 B 树 8.总结 9.参考博文 1.​​​​​…

数据库(mysql)索引

目录 一、索引概念 2、索引优点和缺点 1、优点 2、缺点 3、创建索引的原则依据 二、索引的分类和创建 1、普通索引(标志MUL) 1、直接创建索引 2、修改表结构的方式创建索引 3、创建表的时候指定索引 2、唯一索引(标志NUI&#x…

MySql 数据库【索引】

MySql 数据库【索引】 1. 什么是索引?2. 索引的实现原理?3. 添加索引的条件?4. 索引的操作1. 创建索引2. 删除索引3. 查看一个sql语句是否使用了索引进行检索 5. 索引的失效6. 索引的类型 1. 什么是索引? 索引是在数据库表的字段…

【MySQL数据库】MySQL索引

MySQL索引、事务与存储引擎 一、索引1.1索引的概念1.2索引的作用1.3索引的工作原理1.4索引的副作用1.5索引的应用场景 二、索引的创建与分类2.1普通索引,最基本的索引类型,没有唯一性之类的限制。2.2唯一索引2.3 主键索引2.4组合索引2.5全文索引 三、删除…

MySQL数据库索引机制

文章目录 一、MySQL缓冲区二、MySQL的page1.认识单个page2.认识多个页3.聚簇索引和非聚簇索引 三、索引的操作1.创建主键索引2.创建唯一索引3.创建普通索引4.查询索引的方法5.删除索引的方法6.索引创建原则 一、MySQL缓冲区 MySQL是一款有客户端和服务端的网络应用&#xff0c…

MySQL数据库索引教程(超详细)

索引初步 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 …

【MySql】数据库索引

数据库索引 索引索引的创建索引的查看索引的删除 聚簇索引 & 非聚簇索引聚簇索引非聚簇索引 索引创建原则 索引 可以简单理解为一本书的目录信息,是为了提升查找效率而建立的 索引的创建 1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查…

MySQL 数据库--索引

目录 前言 一、索引及分类 1.索引的概念 2.索引的作用 3.索引的副作用 4.索引的分类 4.1 普通索引 4.2 唯一性索引 4.3 主键索引 4.4 全文索引 4.5 组合索引(单列索引与多列索引) 5.创建索引的原则依据 二、创建及查看索引 1.准备 2.创建索…

MYSQL数据库-索引

MYSQL数据库-索引 零、前言一、索引概念二、认识磁盘三、理解索引1、如何理解Page2、B vs B3、聚簇索引 VS 非聚簇索引4、普通索引5、总结 四、索引操作1、创建索引2、查询索引3、删除索引 零、前言 本章主要讲解MYSQL数据库中的索引这一重要知识点 一、索引概念 索引的价值&a…

MySQL数据库:索引

一、索引简介 1.概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 相当于是给数据库中的数据建立了一个目录,通过目录可以知道…

MySQL数据库的索引

文章目录 一、索引是什么?索引的作用 二、索引的使用查看索引创建索引删除索引 三、索引的底层 一、索引是什么? 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型&a…

Mysql数据库索引详解

一、前言 随着我们业务量不断的增大,会发现查询数据库的时间变的越来越长,其实就是数据库到达了性能的瓶颈,这时候需要我们对其进行优化操作,可能我们第一时间就会想到:加索引。没错,这是优化的一个方向&a…

MySQL 数据库--索引(理论详解及实例演示)

文章目录 前言一、索引及分类1.索引的概念2.索引的作用3.索引的副作用4.索引的分类4.1 普通索引4.2 唯一性索引4.3 主键索引4.4 全文索引4.5 组合索引(单列索引与多列索引) 5.创建索引的原则依据 二、创建及查看索引1.准备2.创建索引的方法2.1 创建普通索…

数据库-mysql之索引

目录 1、索引简介 1.1 索引的含义和特点 1.2 索引的分类 1、普通索引 2、唯一性索引 3、全文索引 4、单列索引 5、多列索引 6、空间索引 1.3 索引的设计原则 1.选择唯一性索引 2.为经常需要排序、分组和联合操作的字段建立索引 3&#xff0…

web前端页面开发工具的演进史

小编是一位有着6年前端开发经验的web前端开发工程师&#xff0c;今天小编从个人的视角来聊一聊web前端开发工具的演进史。 小编第一次接触 web前端开发是在2011年&#xff0c;那会还在上高中。当时正是大家都每天忙碌着装扮自己的QQ空间。那时的web前端布局还是以 <table&g…

关于Webpack前端工程化构建,你必须要掌握这些核心知识点

引言 在很久之前&#xff0c;模块化管理还没有出现&#xff0c;如果我们开发一个页面想要引入一些依赖的话&#xff0c;最常见的做法就是将依赖文件引入到.html文件中。比如&#xff0c;我们要使用JS的一些依赖库&#xff0c;就要在.html文件中使用<script>标签引用&…

构建工具 Vite、Webpack、Rollup对比

Webpack介绍 热更新方面&#xff1a;webpack支持HMR&#xff0c;但是webpack需要全部重新编译并更新&#xff0c;效率较低tree-shaking&#xff1a;webpack2开始支持且消除效果不好&#xff0c;但是webpack5有更好的tree-shaking&#xff08;去除未使用代码&#xff09;分包方…