MySQL 索引学习笔记

1.二叉树,红黑树,B 树,B+树

二叉树:就是每个节点最多只能有两个子节点的树;

红黑树:就是自平衡二叉搜索树,红黑树通过一下五个规则构建:

1.节点只能是红色或黑色;

2.根节点只能是黑色;

3.不能有连续的红色节点;

4.叶子节点为黑色;

5.从任意节点到其所有叶子节点的路径上,黑色节点数相同,黑稿平衡

B 树:多路平衡搜索树,所有节点都存储数据;

B+树:非叶子节点只存键,数据全部存在叶子节点;

2.索引的底层数据结构了解过嘛 ?

索引的底层数据结构采用了 B+树加双向链表的形式实现,N 阶 B 树其实就是每个节点最多存储 N - 1 个键值对和 N 个指针,指向某个键值对的一边,而 N 阶 B+ 树其实就是每个节点最多存储 N - 1 个键和 N 个指针 ,只有叶子节点才存储键值,一旦一个节点存储的 Key 大于 N,中间元素会向上分裂;

而在索引中的 B+ 树就是在叶子节点之间构成一个双向链表,用于范围查询。

3.什么是聚簇索引什么是非聚簇索引 ?

聚簇索引:一个表只能有一个聚簇索引,聚簇索引的叶子节点直接存储行数据,主键默认是聚簇索引,如果没有主键则隐式构建 ROWID,优点是通过索引就可以获取到数据,避免了回表查询,缺点是插入速度依赖主键顺序;

非聚簇索引:就是索引的叶子节点只存主键值,而非完整的数据,一个表可以有多个非聚簇索引,通过索引找到主键后,需要回到聚簇索引获取完整数据。

4.知道什么是回表查询嘛 ?

回表查询是查询数据时通过非聚簇索引进行查询,查询出来的只是数据的主键,还需要通过主键去查询聚簇索引,才能得到完整的数据。

5.索引创建原则有哪些?

1.高频查询字段:where,on,order by,group by 等高频使用的字段;

2.高区分度字段:使用由高区分度的字段,ID,身份证而不是性别;

3.短字段优先:使用整型而不是 VARCHAR;

4.覆盖索引优化:高频查询字段,可以建立联合索引覆盖查询字段,达到不用回表查询的目的;

5.范围查询字段放最后:将范围查询字段放最后,避免索引失效;

6.最左前缀匹配原则:只能最左前缀匹配,避免中间断开;

6.知道什么是左前缀原则嘛 ?

如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询

从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分

失效(后面的字段索引失效)。

7.知道什么叫覆盖索引嘛 ?

覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到 。

8.索引是越多越好嘛? 什么样的字段需要建索引, 什么样的字段不需要?

索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。针对于数据量较大,且查询比较频繁的表建立索引。

针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。

不适合创建索引的字段:

      • 更新频繁字段不适合创建索引
      • 若是不能有效区分数据的列不适合做索引列(如性别,男女未知,最多也就三种,区分度实在太低)
      • 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。比如省会,城市、月份
      • 对于定义为text、image和bit的数据类型的列不要建立索引

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

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

相关文章

嵌入式通信模块实战新范式:基于虚拟仿真平台的NB-IoT核心技能训练——零硬件损耗的全栈式实验方案,重构物联网通信教学逻辑

在万物智联时代,NB-IoT通信模块已成为低功耗广域网的基石。BC260Y作为行业主流模组,其AT指令控制与网络诊断能力是嵌入式开发者的必备技能。传统教学受限于硬件采购成本、设备管理难度及实验风险,难以开展规模化训练。嵌入式仿真实验教学平台…

docker compose的变量使用说明

澄清一下 x-shared-env 和 &shared-api-worker-env 的作用范围: 核心概念:Docker Compose 配置 vs 容器环境 x-shared-env: &shared-api-worker-env 是 Docker Compose 配置的一部分 这些定义仅在 Docker Compose 解析 YAML 文件时 有效它们定义…

美团完整面经

面试岗位 面试的岗位 - 2025春季校招 【转正实习】软件服务工程师-后端方向(成都 - 软硬件服务-SaaS事业部) 一面(业务初试 - 30min) 问题 自我介绍 Java基础 HashMap底层用的数据结构是什么?是线程安全的吗&…

JAVA毕业设计227—基于SpringBoot+hadoop+spark+Vue的大数据房屋维修系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于SpringBoothadoopsparkVue的大数据房屋维修系统(源代码数据库)227 一、系统介绍 本项目前后端分离,分为业主、维修人员、管理员三种角色 1、业主: 登…

uniapp 页面栈一定深度后,回首页导航到新页面的解决方案

uniapp 页面栈一定深度后,回首页导航到新页面的解决方案 uniapp 页面导航解决方案 在 uniapp 中,要实现先弹出页面栈回到首页,然后再跳转到指定页面。 /*** description 后台选择链接专用跳转*/ interface Link {path: string;name?: stri…

java实现Google邮箱SMTP协议

一、开通Google的SMTP协议 在谷歌邮箱中开启IMAP访问 到google的设置中开启两步验证功能 在到 创建和管理应用专用密码 二、java中实现 引入maven <!--邮件--><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artif…

【2025最新】Adobe Illustrator下载保姆级安装教程(附官方下载链接)

文章目录 Adobe Illustrator 2024新功能介绍如何提高Adobe Illustrator的运行效率 Adobe Illustrator 这款神器相信不用我多介绍了吧&#xff0c;设计师们的得力助手&#xff01;最新的2025版据说功能和体验都提升了不少。这篇呢&#xff0c;算是我个人整理的一个超详细adobe i…

2025.06.11【Ribo-seq】|根据注释文件获取外显子及ORF序列

文章目录 一、准备材料二、提取外显子区间为BED文件1. 提取GTF中exon为BED 三、用bedtools提取外显子fasta四、后续拼接外显子为ORF序列五、流程总结 一、准备材料 基因组fasta&#xff08;如&#xff1a;genome.fa&#xff09;RiboCode生成的GTF文件&#xff08;如&#xff1…

python第48天打卡

知识点回顾&#xff1a; 随机张量的生成&#xff1a;torch.randn函数卷积和池化的计算公式&#xff08;可以不掌握&#xff0c;会自动计算的&#xff09;pytorch的广播机制&#xff1a;加法和乘法的广播机制 ps&#xff1a;numpy运算也有类似的广播机制&#xff0c;基本一致 作…

Day50 Python打卡训练营

知识点回顾&#xff1a; 1. resnet结构解析 2. CBAM放置位置的思考 3. 针对预训练模型的训练策略 a. 差异化学习率 b. 三阶段微调 现在我们思考下&#xff0c;是否可以对于预训练模型增加模块来优化其效果&#xff0c;这里我们会遇到一个问题 预训练模型的结构和权重是固定…

leetcode:42. 接雨水(秒变简单题)

题目要求 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 要求给出一列柱子&#xff0c;求该柱子能盛放多少雨水 解题思路&#xff1a; 这些柱子围城了一个“盆地”&#xff0c;雨水会积攒在低洼处&…

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…