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

2.MySQL面试题之索引

1. 为什么索引要用 B+树来实现呢,而不是 B 树?

MySQL 选择使用 B+ 树来实现索引,而不是 B 树,主要是基于以下几个原因:

1.1 数据存储和访问效率

  • B 树:在 B 树中,数据和索引都存储在每个节点中。这意味着在进行范围查询时,可能需要访问大量节点,因为数据分散在不同的节点中。
  • B+ 树:在 B+ 树中,所有数据都存储在叶子节点中,内部节点只存储索引。这使得范围查询更加高效,因为只需遍历叶子节点即可。此外,叶子节点通过链表相连,可以顺序访问,进一步提高了范围查询的效率。

1.2 磁盘 I/O 性能

  • B 树:由于数据和索引混合存储,节点的大小不一致,导致磁盘页的利用率不高,增加了磁盘 I/O 操作的次数。
  • B+ 树:所有叶子节点在同一层,且节点大小一致,磁盘页利用率更高,减少了磁盘 I/O 操作次数。内部节点只存储索引,节点更小,可以在一次磁盘 I/O 操作中加载更多的索引,提高了查询效率。

1.3 更高的平衡性和稳定性

  • B 树:由于数据和索引混合存储,插入和删除操作可能导致频繁的节点分裂和合并,影响树的平衡性。
  • B+ 树:数据只存储在叶子节点,插入和删除操作只影响叶子节点,内部节点只存储索引,减少了节点分裂和合并的频率,保持了树的平衡性和稳定性。

1.4 更高的查询性能

  • B 树:在进行等值查询时,需要逐层查找,直到找到目标节点。
  • B+ 树:由于内部节点只存储索引,查询路径更短,查询性能更高。对于范围查询,只需遍历叶子节点,进一步提高了查询效率。

1.5 更好的内存利用率

  • B 树:节点大小不一致,内存利用率较低。
  • B+ 树:节点大小一致,内存利用率更高,可以在内存中存储更多的索引,提高查询效率。

2. MySQL 中有哪些类型的索引?

  • 主键索引(Primary Key)
  • 唯一索引(Unique Key)
  • 普通索引(Index)
  • 全文索引(Fulltext Index)
  • 组合索引(Composite Index)
    下面我们分别来介绍下各个索引的用法、作用、使用场景。
    首先,我们创建一个示例表 employees,包含员工的 id、name、department 和 salary 字段。
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),department VARCHAR(50),salary DECIMAL(10, 2)
);

2.1 普通索引

普通索引用于加速查询。我们在 name 列上创建一个普通索引:

CREATE INDEX idx_name ON employees(name);

2.2 唯一索引

唯一索引确保列中的所有值都是唯一的。我们在 department 列上创建一个唯一索引:

CREATE UNIQUE INDEX idx_department ON employees(department);

2.3 组合索引

组合索引用于加速多列组合查询。我们在 department 和 salary 列上创建一个组合索引:

CREATE INDEX idx_department_salary ON employees(department, salary);

2.4 使用索引进行查询

2.4.1 等值查询

SELECT * FROM employees WHERE name = 'John Doe';

索引 idx_name 会加速这个查询,因为它直接定位到 name 为 ‘John Doe’ 的记录。

2.4.2 范围查询

使用 salary 列上的索引进行范围查询:

SELECT * FROM employees WHERE salary > 50000;

如果 salary 列上有索引,这个查询会更快,因为索引可以快速定位到 salary 大于 50000 的记录。

2.4.3 组合索引查询

使用 department 和 salary 列上的组合索引进行查询:

SELECT * FROM employees WHERE department = 'Engineering' AND salary > 70000;

索引 idx_department_salary 会加速这个查询,因为它可以同时利用 department 和 salary 列上的索引。

2.5 查看索引

可以使用 SHOW INDEX 语句查看表上的索引:

SHOW INDEX FROM employees;

2.6 删除索引

可以使用 DROP INDEX 语句删除索引:

DROP INDEX idx_name ON employees;

2.7 执行计划分析

使用 EXPLAIN 语句分析查询的执行计划,查看索引的使用情况:

EXPLAIN SELECT * FROM employees WHERE name = 'John Doe';

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

  • 聚簇索引:数据行的物理顺序与索引的逻辑顺序相同,主键索引通常是聚簇索引。
  • 非聚簇索引:数据行的物理顺序与索引的逻辑顺序不同,其他类型的索引通常是非聚簇索引。

相关文章:

2.MySQL面试题之索引

1. 为什么索引要用 B树来实现呢,而不是 B 树? MySQL 选择使用 B 树来实现索引,而不是 B 树,主要是基于以下几个原因: 1.1 数据存储和访问效率 B 树:在 B 树中,数据和索引都存储在每个节点中。…...

复制CodeIgniter新版的array_group_by辅助函数

很需要php数组的group_by功能,发现codeIgniter4.5新版中已有这个辅助函数,但我用的codeIgniter4.14没有,又不想升级php等一系列东西,就想把把codeIgniter4.5中array_group_by函数复制过来用。 先试着把新版本的array_helper文件及…...

合并两个 ES (Elasticsearch) 的数据

要将两个 Elasticsearch 实例中的同一个索引(/test_index)的数据合并到一个实例中,你可以按照以下步骤操作: 假设 Elasticsearch 1 (ES1) 和 Elasticsearch 2 (ES2) 都有相同的索引 /test_index。希望将 ES2 中的数据合并到 ES1 中。步骤 导出 ES2 的数据:使用 Elasticse…...

Linux网络协议.之 tcp,udp,socket网络编程(四).之网络转换函数htonl,ntohs等介绍

字节转换函数 把给定系统所采用的字节序称为主机字节序,为了避免不同类别主机之间在数据交换时由于对于字 节序的不同而导致的差错,引入了网络字节序。 主机字节序到网络字节序 u_long htonl(u_long hostlong); u_short htons(u_short short); 网络字节…...

LXC和udev知识点

1 POSIX pthread_create原理 1)fork()、pthread_create()、vfork()对应的系统调用分别是sys_fork()、sys_clone()、sys_vfork(),它们在内核中都是通过do_fork()实现的。 2)系统中所有的进程都组织在init_task.tasks链表下面,每个进…...

基于springboot+vue+uniapp的智慧校园管理系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...

论文辅导 | 基于概率密度估计与时序Transformer网络的风功率日前区间预测

辅导文章 模型描述 本文所提出的时序优化Transformer 结构,该模型从结构上看由三部分组成:向量映射、编码器和解码器。编码器输入为数值天气预报数据以及相应的时间编码。解码器输入为预测日之前输出功率历史数据以及相应的时间编码。这些数据在经过向量…...

金蝶云星空单据体数量汇总-分组列信息

文章目录 金蝶云星空单据体数量汇总-分组列信息BOS配置效果展示 金蝶云星空单据体数量汇总-分组列信息 BOS配置 效果展示...

树状数组基础知识以及相关习题

文章目录 什么是树状数组?如何理解树状数组如何理解精髓lowbit二叉树和树状数组的结构树状数组的优点树状数组模板单点修改,区间查询区间修改,单点查询区间修改,区间查询树状数组法线段树法 树状数组基础练习题逆序对动态求连续区…...

2023大数据-架构师案例(八)

Lambda架构 nginx (b) Hbase (c)Spark Streaming (d)Spark (e)MapReduce (f)ETL (g)MemSQL (h)HDFS &#x…...

【Python】Python:探索未来科技的风向标

Python:探索未来科技的风向标 一、背景 近年来,随着人工智能、大数据、云计算等技术的飞速发展,Python 作为一门功能强大、简单易学的编程语言,逐渐成为了开发者的首选。在我国,Python 的热度持续攀升,不…...

Java语言程序设计——篇十一(6)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…...

2024年有哪些好用的文件加密软件?十款常用加密软件推荐

在2024年,随着数据泄露和网络威胁的日益复杂,文件加密软件成为了保护敏感信息不可或缺的工具。无论是个人用户还是企业,选择合适的加密软件都是确保数据安全的重要一环。 1. 安秉加密软件 安秉加密软件专为企业设计,提供全面的信…...

书生大模型学习笔记3 - 书生开源大模型链路体系

学习视频链接:书生浦语大模型全链路开源体系_哔哩哔哩_bilibili...

【竞技宝】奥运会:法国国奥淘汰埃及国奥晋级决赛

法国国奥在巴黎奥运会男足半决赛跟埃及国奥相遇,赛前大部分球迷和媒体,都一边倒看好法国国奥能轻松获胜。首先,法国国奥整体实力高出一个档次。最后,法国国奥坐拥主场作战的优势。所以,法国国奥正常发挥的话&#xff0…...

C++的STL简介(四)

目录 1.List 2.list 模拟实现 2.1基本框架 2.2 list_node 2.3 list 2.3.1 默认构造 2.3.2 析构函数 2.3.3 begin() 2.3.4 end() 2.3.5 size() 2.3.6 empty() 2.3.7 inser…...

NIO专题学习(一)

一、BIO/NIO/AIO介绍 1. 背景说明 在Java的软件设计开发中,通信架构是不可避免的。我们在进行不同系统或者不同进程之间的数据交互,或者在高并发的通信场景下都需要用到网络通信相关的技术。 对于一些经验丰富的程序员来说,Java早期的网络…...

Linux学习笔记:Linux基础知识汇总(个人复习版)

常用命令: 1、ls -a:显示所有文件(包括隐藏文件),简洁版 -l:显示所有文件,详细版 -R:显示所有文件以及子目录下文件,简洁版 可以搭配使用。 2、netstat -i&#x…...

MSR020/MSR040低温漂、低功耗电压基准

MSR020/MSR040 是低温漂、低功耗、高精度 CMOS 电压基准, 具有 0.05% 初始精度和低功耗的特点。 该器件的低输出电压迟滞和低长期输出电压漂移的 特性,可以进一步提高稳定性和系统可靠性。 此外,器 件的小尺寸和低工作电流的特性使其非…...

一个是生产打包的时候, 一个是本地测试启动的时候,maven如何配置?

在Maven项目中,使用两套不同的pom.xml配置分别用于生产打包和本地测试启动是常见需求,尤其当你需要调整依赖范围、插件配置或使用不同资源文件时。Maven通过profiles和activeProfiles提供了灵活的配置管理方案,允许你为不同的环境或构建场景定…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...