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.pswp.cn/diannao/86763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows安装docker及使用

下载 https://www.docker.com/ 安装 启动 此时拉取镜像会报错 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 配置引擎 添加以…

多参表达式Hive UDF

支持的操作符 :跳过,即无条件筛选:等于!:不等于range:区间内,range[n,m]表示 between n and mnrange:区间外,即not between andin:集合内,in(n,m,j,k)表示 in…

GO后端开发内存管理及参考答案

什么是 Go 的逃逸分析(Escape Analysis),为什么需要它? Go 的逃逸分析是一种编译时技术,用于确定变量的生命周期是否超出其创建的函数作用域。通过分析变量的使用方式,编译器能够判断变量是否需要在堆上分…

未来智能系统演进路线:从AGI到ASI的技术蓝图

引言:智能革命的下一个十年 在AI技术突破性发展的当下,我们正站在通用人工智能(AGI)向人工超级智能(ASI)跃迁的关键转折点。本文将系统解析未来3-10年的技术演进路径,通过模块化组件插件&#…

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…

AI Agent 核心策略解析:Function Calling 与 ReAct 的设计哲学与应用实践

引言 在人工智能助手和自主Agent快速发展的今天,如何让AI系统不仅能够理解复杂指令,还能有效地执行任务并适应动态环境,成为技术演进的关键问题。本文将深入探讨两种核心的Agent设计策略:Function Calling(函数调用&a…

window下配置ssh免密登录服务器

window下配置ssh免密登录服务器 本地windows远程登录我的ssh服务器10.10.101.xx服务器,想要每次都免密登录这个服务器. 记录下教程,防止后期忘记,指导我实现这个过程。 教程 二、实践步骤:Windows 上配置 SSH 免密登录 2.1 确…

树莓派5实现串口通信教程

1,安装依赖 确保已经安装 pyserial: pip3 install pyserial 如果无法用pip3安装,那就创建一个虚拟环境进行安装 如果你想安装最新版本的 pyserial 或其它非 Debian 打包的库,建议在用户目录下创建一个虚拟环境: 安装…

(五)Linux性能优化-CPU-性能优化

性能优化文章参考倪朋飞老师的Linux性能优化实战课程 性能优化方法论 Q:怎么评估性能优化的效果? A:对系统的性能指标进行量化,并且要分别测试出优化前、后的性能指标,用前后指标的变化来对比呈现效果。确定性能的量…

ThreadLocal原理及内存泄漏分析

介绍 每个线程内部都有一个私有的 ThreadLocalMap 实例&#xff0c;用于存储该线程关联的所有 ThreadLocal 变量。 ThreadLocalMap 内部的 Entry 继承自 WeakReference<ThreadLocal<?>>。所以**Entry 的 key&#xff08;即 ThreadLocal 对象本身&#xff09;是通…

Oracle OCP认证考试考点详解083系列18

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 86. 第86题&#xff1a; 题目 解析及答案&#xff1a; 86、使用FLASHBACK TABLE的两个先决条件是什么&#xff1f; A&#xff09;必须对…

git merge合并分支push报错:Your branch is ahead of ‘xxx‘ by xx commits.

git merge合并分支push报错&#xff1a;Your branch is ahead of xxx by xx commits. Your branch is ahead of xxx by xx commits.(use "git push" to publish your local commits)解决方案&#xff1a; git checkout 到要合入的分支&#xff0c;然后&#xff1a; …

英语作文模板

核心原则&#xff1a;三段式结构 ​英文: The core principle is a three-paragraph structure (Introductory paragraph Main body paragraph Concluding paragraph).​中文: 核心原则是采用三段式结构&#xff08;开头引论段 中间主体段 结尾总结段&#xff09;。 模板 …

[安卓按键精灵辅助工具]一些安卓端可以用的雷电模拟器adb命令

在雷电论坛上看到很多adb命令&#xff0c;不过并没有针对安卓按键进行处理&#xff0c;这里做了一下测试&#xff0c;把能用在安卓按键上的adb命令整理出来。 调用adb命令使用的山海插件中的Execute 执行shell命令 adb命令源码如下&#xff1a; Import "shanhai.lua&quo…

uni-app项目怎么实现多服务环境切换

前情 uni-app是我比较喜欢的跨平台框架&#xff0c;它能开发小程序/H5/APP(安卓/iOS)&#xff0c;重要的是对前端开发友好&#xff0c;自带的IDE可视化的运行和打包也让开发体验也非常棒&#xff0c;公司项目就是主推uni-app&#xff0c;现在我的开发模式是用HBuilder X跑项目…

论文阅读:强化预训练

大型语言模型 (LLMs) 的惊人能力很大程度上归功于在海量文本语料库上进行下一词元预测 (Next-Token Prediction, NTP) 的规模化训练。与此同时&#xff0c;强化学习 (Reinforcement Learning, RL) 已成为微调 LLMs、使其与人类偏好对齐或增强特定技能&#xff08;如复杂推理&am…

Java 大视界——Java大数据在智能安防视频监控中的异常事件快速响应与处理机制

​​摘要&#xff1a;​​ 在智慧城市和工业4.0浪潮下&#xff0c;智能安防系统日均产生PB级视频流数据。如何在实时性、准确性、成本三者间取得平衡&#xff0c;成为行业核心挑战。本文将深入探讨​​Java技术栈在大规模视频分析系统中的核心作用​​&#xff1a;基于FlinkJav…

华为云Flexus+DeepSeek征文| 基于Dify-LLM平台应用实践:创建智能知识库问答助手

华为云FlexusDeepSeek征文&#xff5c; 基于Dify-LLM平台应用实践&#xff1a;创建智能知识库问答助手 前言一、相关名词介绍1.1 华为云Flexus X实例介绍1.2 华为云ModelArts Studio介绍 二、本次实践介绍2.1 本次实践环境介绍2.2 Dify平台介绍 三、搭建Dify-LLM开发平台3.1 进…

Spark on yarn的作业提交流程

一、YarnClient 二、YarnCluster 三、详细描述 客户端&#xff08;Client&#xff09;通过YARN的ResourceManager提交应用程序。在此过程中&#xff0c;客户端进行权限验证&#xff0c;生成Job ID和资源上传路径&#xff0c;并将这些信息返回给客户端。客户端将jar包、配置…

MySQL 主从复制与一主多从架构实战详解

文章目录 一、MySQL 主从复制的本质原理 数据同步流程&#xff1a; 主从复制三大线程&#xff1a; 二、主从复制的三种模式 三、一主多从架构设计与应用 应用场景&#xff1a; 优势&#xff1a; 四、单机模拟主从复制&#xff08;实战配置&#xff09; 环境准备&#xff1a…