MySQL的索引(优缺点,二叉树,红黑数,B+Tree)【详解】

1.什么是索引

索引:是用于提高查询数据性能的一种数据结构。实际开发中,对数据的读写操作大概是10:1

  • 把索引理解为目录。

  • 构建索引的过程,就是构建目录的过程

  • 构建索引的过程中会对数据进行排序

2.索引的优缺点

优点:

  • 可以极大的提升查询数据的速度

  • 可以帮助进行数据排序

缺点:

  • 索引也会占用存储空间

  • 索引会影响增、删、改的性能

3.什么字段适合加索引

适合添加索引的情况:

  1. 经常作为查询条件的字段

  2. 用于和其它表关联的字段:外键字段

  3. 经常用来排序的字段:构建索引时,MySQL会对数据进行排序

  4. 值的重复率低的字段:比如身份证号字段适合加索引;性别字段不适合加索引

不适合添加索引的情况:

  1. 值的重复率高的字段:比如性别

  2. 频繁更新的字段

  3. 值过大的字段:比如有一个字段类型 varchar(60000)

  4. 值无序的字段:值变化时,索引需要重新排序

4. 索引的数据结构

数据结构可视化地址:https://www.cs.usfca.edu/~galles/visualization/

好处:

  • 大部分情况下,查找数据的速度,会比全表扫描要快

问题:

  • 二叉树没有自平衡的效果,极端情况可能变成单链表。之后查找数据又变成全表扫描了

  • 一个节点最多只能有2个子节点,如果数据特别多,树的层级会非常深,导致IO次数多,影响查询速度

5.平衡二叉树-红黑树组织索引值

好处:

  • 这种算法会进行树的染色与旋转,保证树的平衡:左右子树的高度差,最大是2倍,不可能形成单链表

缺点:

  • 一个节点最多有2个子节点,如果数据量特别大,树的层级就会非常深。查找数据时IO的次数就会多,查找的性能就会降低

        

6.B-Tree

特点:

  • 每个节点允许有多个子节点

  • 能够通过分裂和自旋,尽可能的减少树的层级,实现树的平衡

好处:

  • 树的层级更浅,IO次数就更少

  • 不会退化成单链表

缺点:

  • 查询速度不稳定。有些数据在根节点上,有些数据在叶子节点上,每个节点上都有数据

  • 树的层级还不够浅。MySQL的每个节点16KB,一个节点里存储的有索引值还有对应的数据,那么下级节点数量就少,导致树的层级不够浅

7.B+Tree组织索引值

B+Tree组织索引值的结构:

  • 每个节点,空间大小是以“页”为单位。默认一页16KB

  • 节点存储的内容:

    • 非叶子节点只存储:索引值和下级节点的地址,不保存数据

    • 叶子节点才会存储:索引值和每一行的数据

    目的是:让非叶子节点可以有更多的子节点,从而降低树的深度

  • 所有的叶子节点之间,构建成双向链表:方便进行范围查询

  • 所有的数据都已经帮我们做好了排序

面试问题到:如果一张表大概1000W条数据,MySQL里索引树的深度有多少?大概3~4层,                               如果叶子节点在内存里,不需要加载,IO加载次数大概2-3层

这里图片的非叶子节点是3个开始,项目里是根据数据进行的算法分析

8. 索引语法

1.语法

  • 创建索引:create index 索引名 on 表名(字段,字段,..)

  • 查询索引:show indexes from 表名 或者 show index from 表名

  • 删除索引:drop index 索引名 on 表名

2.示例

#给tb_emp表里name字段添加索引
create index idx_name on tb_emp(name);
#查询一张表有哪些索引
show indexes from tb_emp;
#删除索引
drop index idx_name on tb_emp;

演示图:

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

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

相关文章

决策树 | 分类树回归树:算法逻辑

目录 一. 决策树(Decision Tree)1. 决策树的构建1.1 信息熵(Entropy)1.1.1 信息量&信息熵 定义1.1.2 高信息熵&低信息熵 定义1.1.3 信息熵 公式 1.2 信息增益(Information Gain)1.2.1 信息增益的计算1.2.2 小节 2. 小节2.1 算法分类2.2 决策树算法分割选择2.3 决策树算…

C# WPF编程-概述

C# WPF编程-基础知识 概述WPF高级API硬件加速与WPF分辨率无关性WPF体系结构WPF的主要类WPF工具包Visual Studio IDE 概述 WPF(Windows Presentation Foundation)是用于Windows的现代图形显示系统。引入了“内置硬件加速”和“分辨率无关”等创新功能。 WPF高级API 类似Web的…

MyBatis 框架之一:简介及环境搭建详细步骤

1. MyBatis 是什么? MyBatis 是一个流行的、轻量级的 Java 持久层框架,它简化了与数据库交互和 SQL 映射的过程。MyBatis 取代了 JDBC 原始 API 的大量繁琐工作,允许开发者将更多的精力放在业务逻辑上而不是处理数据访问细节。 mybatis 是一款…

2024年腾讯云学生用户便宜云服务器购买攻略

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

libusb_Qt使用

Libusb libusb_github 建议直接下载库,编译好麻烦 QT调用 .pro文件添加: win32: LIBS -L$$PWD/LIB/libusb/x64/ -llibusb-1.0.cpp调用即可 #include "LIB/libusb/libusb.h" void class_name::fun(){/* 1. */libusb_init(NULL);/**/str…

rt-thread之sal+lwip的tcp客户端示例记录(接收非阻塞)

示例记录 #include "lwip_test.h" #include "lwip/sockets.h" #include "netdev.h"#define DBG_ENABLE #define DBG_TAG "lwip.tst" #define DBG_LVL DBG_LOG#include <rtdbg.h>#define SERVER_PORT 8080 #define SERVER_HOST …

1、计划任务介绍

Windows计划任务介绍 1、含义&#xff1a; 简单点就是定时执行任务。 在许多场景下&#xff0c;我们定时执行一些任务。比如&#xff1a;定时拉取、备份文件&#xff0c;更新代码等等操作。 WinR打开运行框&#xff0c;输入&#xff1a;control schedtasks&#xff0c;就会…

LLM和自动驾驶强强联合 | DriveDreamer-2:自动驾驶定制视频生成世界模型!

文章链接&#xff1a;https://arxiv.org/pdf/2403.06845.pdf 项目文档&#xff1a;https://drivedreamer2.github.io/ 自动驾驶是最近几年非常火热的方向&#xff0c;那LLM和视频生成在自动驾驶领域有哪些应用呢&#xff1f;今天和大家一起学习一下最新的一篇工作————Driv…

多线程相关

JMM&#xff08;内存模型&#xff09; JMM三个特性&#xff1a; 原子性 一个或者多个操作在CPU执行的过程中不被中断的特性&#xff0c;要么全部成功&#xff0c;要么全部失败可见性 一个线程修改了共享变量的值后&#xff0c;其他线程能够立即看到这个修改有序性 程序执行的…

武汉LUG报名开启!这次我们来到了华中科技大学,3月23日(周六)来见面吧!

内容来源&#xff1a;deepin 社区 LUG 不间断&#xff0c;精彩不停歇&#xff0c;经过一个月的修整&#xff0c;2024年3月23日下午&#xff0c;我们将在华中科技大学东校区举办 3月 WHLUG&#xff0c;欢迎大家来到现场&#xff0c;和我们一起交流技术&#xff0c;分享自己学习过…

惊艳到了,每个开发人员都必须要知道的6个HTML属性!

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 说起 HTML 很多同学都会认为&#xff0c;这不就是小菜一碟吗&#xff…

大型污水处理站运维公司怎么选择

大型污水处理站运维公司的选择是关乎环境保护和城市发展的重要决策。在如今污水治理领域日益重要的背景下&#xff0c;选择一家专业的运维公司对于确保污水处理站的高效运行、提高处理效果和保护环境具有关键意义。那么&#xff0c;我们应该如何选择适合自己的大型污水处理站运…