当前位置: 首页 > news >正文

mysql 索引(为什么选择B+ Tree?)

索引实现原理

索引:排好序数据结构
优点:降低I/O成本,CPU的资源消耗(数据持久化在磁盘中,每次查询都得与磁盘交互)
缺点:更新表效率变慢,(更新表数据,还要更新索引),占用空间
分类:主键索引,唯一索引,单值索引,组合索引

索引的数据结构

Hash表(舍弃:不适合范围查找和排序)

hash 是一维数组 + 二维链表:取模后进行存储

对于hash算法的CRUD来讲,时间复杂度为O(1)
但对于范围查询和排序来讲,时间复杂度又从最好变为O(n)

在这里插入图片描述

二叉树(舍弃:自增序列无效)

理想情况
在这里插入图片描述

mysql不使用的原因:对于自增数据,树左倾或右倾形成链表,时间复杂度变回了O(n)
在这里插入图片描述

红黑树(舍弃:树会很高)

本质就是二叉树,相比较于二叉树,他有平衡功能(当一边高时,会自动更新根节点),又称为二叉平衡树
在这里插入图片描述

mysql 不使用原因:数据量大的时候,树会更高,查找到叶子节点效率也会慢,每层就是一次IO

B Tree(舍弃:每个节点存放数据,可以优化)

特点:在每个节点,放多个索引
优点:树就不会高,但每个节点都会存data数据,会占据很大的磁盘空间
在这里插入图片描述

B+ Tree(mysql默认)

优点:
1.非叶子节点不储data,只存储索引,可以放更多的索引
2.叶子节点包含所有索引+data字段,由双向链表排成一行(更好的实现范围查找和排序)
3.叶子节点用指针连接,提高区间访问的性能

mysql 默认每个节点为16KB,
例如:若使用bigInt的主键,每个节点大概可放1170 个索引,若树高3层,则为1170*1170 *16 约为2000多万索引

在这里插入图片描述

总结:(数据存叶子节点,双向链表)

BTree 和B+Tree都是多路搜索树,区别在于叶子节点和非叶子节点的处理。
1.BTree 每个节点都储存索引+数据,B+Tree 的非叶子节点只存储索引+指向叶子节点的指针,数据存到叶子节点,这样B+Tree 的非叶子节点就可以放更多的索引,树的层级也就降低了,这样查找更快,减少了磁盘IO
2.B+Tree 的叶子节点都有指针相连接,形成双向链接表,这样在范围和排序时更快,而BTree 的叶子节点没有相连接,范围查找时还得向父节点查找。所以B+Tree 的范围查找和排序更好

数据结构训练网址

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

相关文章:

mysql 索引(为什么选择B+ Tree?)

索引实现原理 索引:排好序的数据结构 优点:降低I/O成本,CPU的资源消耗(数据持久化在磁盘中,每次查询都得与磁盘交互) 缺点:更新表效率变慢,(更新表数据,还要…...

蓝桥杯-带分数

法一 /* 再每一个a里去找c,他们共用一个st数组,可以解决重复出现数字 通过ac确定b,b不能出现<0 b出现的数不能和ac重复*/import java.util.Scanner;public class Main {static int n,res;static boolean[] st new boolean[15];static boolean[] backup new boolean[15];…...

消息队列面试题

目录 1. 为什么使用消息队列 2. 消息队列的缺点 3. 消息队列如何选型&#xff1f; 4. 如何保证消息队列是高可用的 5. 如何保证消息不被重复消费&#xff08;见第二条&#xff09; 6. 如何保证消息的可靠性传输&#xff1f; 7. 如何保证消息的顺序性&#xff08;即消息幂…...

Android和IOS应用开发-Flutter 应用中实现记录和使用全局状态的几种方法

文章目录 在Flutter中记录和使用全局状态使用 Provider步骤1步骤2步骤3 使用 BLoC步骤1步骤2步骤3 使用 GetX&#xff1a;步骤1步骤2步骤3 在Flutter中记录和使用全局状态 在 Flutter 应用中&#xff0c;您可以使用以下几种方法来实现记录和使用全局状态&#xff0c;并在整个应…...

若依 ruoyi-cloud [网关异常处理]请求路径:/system/user/getInfo,异常信息:404

这里遇到的情况是因为nacos中的配置文件与项目启动时的编码不一样&#xff0c;若配置文件中有中文注释&#xff0c;那么用idea启动项目的时候&#xff0c;在参数中加上 -Dfile.encodingutf-8 &#xff0c;保持编码一致&#xff0c;&#xff08;用中文注释的配置文件&#xff0c…...

自然语言处理里预训练模型——BERT

BERT&#xff0c;全称Bidirectional Encoder Representation from Transformers&#xff0c;是google在2018年提出的一个预训练语言模型&#xff0c;它的推出&#xff0c;一举刷新了当年多项NLP任务值的新高。前期我在零、自然语言处理开篇-CSDN博客 的符号向量化一文中简单介绍…...

2024年信息技术与计算机工程国际学术会议(ICITCEI 2024)

2024年信息技术与计算机工程国际学术会议&#xff08;ICITCEI 2024&#xff09; 2024 International Conference on Information Technology and Computer Engineering ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 大会主题&#xff1a; 信息系统和技术…...

渗透测试修复笔记 - 02 Docker Remote API漏洞

需要保持 Docker 服务运行并且不希望影响其他使用 Docker 部署的服务&#xff0c;同时需要禁止外网访问特定的 Docker API 端口&#xff08;2375&#xff09;&#xff1a;通过一下命令来看漏洞 docker -H tcp://ip地址:2375 images修改Docker配置以限制访问 修改daemon.json配…...

Spring(创建对象的方式3个)

3、Spring IOC创建对象方式一&#xff1a; 01、使用无参构造方法 //id&#xff1a;唯一标识 class&#xff1a;当前创建的对象的全局限定名 <bean id"us1" class"com.msb.pojo.User"/> 02、使用有参构造 <bean id"us2&…...

【GPT-SOVITS-02】GPT模块解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…...

6个选品建议,改善你的亚马逊现状。

一、市场热点与需求调研 深入研究当前市场趋势&#xff0c;了解消费者需求的变化。使用亚马逊的销售数据、评价、问答等功能&#xff0c;以及第三方市场研究工具&#xff0c;比如店雷达&#xff0c;分析潜在热销产品的特点。注意季节性需求&#xff0c;提前布局相关选品&#…...

SQL中的SYSDATE函数

前言 在SQL语言中&#xff0c;SYSDATE 是一个非常实用且常见的系统内置函数&#xff0c;尤其在Oracle和MySQL数据库中广泛使用。它主要用来获取服务器当前的日期和时间&#xff0c;这对于进行实时数据记录、审计跟踪、有效期计算等场景特别有用。本文将详细解析SYSDATE函数的使…...

Rust的async和await支持多线程运行吗?

Rust的async和await的异步机制并不是仅在单线程下实现的&#xff0c;它们可以在多线程环境中工作&#xff0c;从而利用多核CPU的并行计算优势。然而&#xff0c;异步编程的主要目标之一是避免不必要的线程切换开销&#xff0c;因此&#xff0c;在单线程上下文中&#xff0c;asy…...

P2676 [USACO07DEC] Bookshelf B

[USACO07DEC] Bookshelf B 题目描述 Farmer John 最近为奶牛们的图书馆添置了一个巨大的书架&#xff0c;尽管它是如此的大&#xff0c;但它还是几乎瞬间就被各种各样的书塞满了。现在&#xff0c;只有书架的顶上还留有一点空间。 所有 N ( 1 ≤ N ≤ 20 , 000 ) N(1 \le N…...

【数学】第十三届蓝桥杯省赛C++ A组/研究生组《爬树的甲壳虫》(C++)

【题目描述】 有一只甲壳虫想要爬上一棵高度为 n 的树&#xff0c;它一开始位于树根&#xff0c;高度为 0&#xff0c;当它尝试从高度 i−1 爬到高度为 i 的位置时有 Pi 的概率会掉回树根&#xff0c;求它从树根爬到树顶时&#xff0c;经过的时间的期望值是多少。 【输入格式…...

Java毕业设计 基于springboot vue招聘网站 招聘系统

Java毕业设计 基于springboot vue招聘网站 招聘系统 springboot vue招聘网站 招聘系统 功能介绍 用户&#xff1a;登录 个人信息 简历信息 查看招聘信息 企业&#xff1a;登录 企业信息管理 发布招聘信息 职位招聘信息管理 简历信息管理 管理员&#xff1a;注册 登录 管理员…...

Leetcode 1. 两数之和

心路历程&#xff1a; 很简单的题&#xff0c;双层暴力就可以&#xff0c;用双指针的话快一点。暴力时间复杂度O( n 2 n^2 n2)&#xff0c;双指针时间复杂度O(nlogn) O(n) O(n) O(nlogn)。 注意的点&#xff1a; 1、题目需要返回原数组的索引&#xff0c;所以排序后还需要…...

【elasticsearch实战】从零开始设计全站搜索引擎

业务需求 最近需要一个全站搜索的功能&#xff0c;我们的站点的特点是数据多源&#xff0c;即有我们本地数据库&#xff0c;也包含了第三方数据源&#xff0c;我们的数据类型除了网页&#xff0c;还包括了各种类型的文档&#xff0c;例如&#xff1a;doc、pdf、excel、ppt等格…...

基于tcp协议的网络通信(基础echo版.多进程版,多线程版,线程池版),telnet命令

目录 基础版 思路 辅助函数 服务端 代码 运行情况 -- telnet ip 端口号 传输的数据为什么没有转换格式 客户端 思路 代码 多进程版 引入 问题 解决 注意点 服务端 代码 运行情况 进程池版(简单介绍) 多线程版 引入 问题解决 注意点 服务端 代码 …...

Ubuntu20系统安装完后没有WIFI

Ubuntu20系统安装完后没有WIFI 查看后发现是缺少网卡&#xff0c;经过查询之后&#xff0c;发现是HRex39/rtl8852be 然后查询了Kernel版本 Check the Kernel Version in Linux $ uname -srm Linux 5.15.0-67-generic x86_64然后进行下载安装 Build(for kernel < 5.18) …...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...