MySQL面试八股文:索引篇

news2024/11/24 6:09:40

 

索引的定义

索引是数据库中用来加速数据查询的一种数据结构。它可以将数据表中的某一列或多列进行排序,以便快速查找数据,减少数据库的扫描次数,提高查询速度。

索引的优缺点

索引的优点是可以大幅度提高数据查询的速度,尤其是对于大型数据库。同时,索引可以保证数据的唯一性、减少冗余数据,提高数据库的完整性和安全性。然而,索引也有缺点。首先,索引需要占用一定的存储空间,如果建立了太多的索引,可能会占用过多的空间。其次,索引的更新和维护会增加数据库的开销,因此在一些写操作较多的场景下,索引会影响性能。

何时需要建立索引

在一些大型的数据表中,如果需要快速查询某些数据,可以通过建立索引来提高查询速度。通常情况下,对于经常查询、排序、分组的字段需要建立索引,这些字段包括主键、外键、经常用于查询的字段等。需要注意的是,建立索引不是无脑加,应该根据实际情况进行选择,过多的索引会浪费存储空间和影响性能。

何时不需要建立索引

  1. where条件中用不到的字段不适合建立索引
  2. 表记录较少。比如只有几百条数据,没必要加索引。
  3. 需要经常增删改。需要评估是否适合加索引
  4. 参与列计算的列不适合建索引
  5. 区分度不高的字段不适合建立索引,如性别,只有男/女/未知三个值。加了索引,查询效率也不会提高。

索引的数据结构

常见的索引数据结构包括B树索引、B+树索引和Hash索引。其中,B树索引是一种自平衡的多叉树结构,能够快速地查找数据,但是效率并不如B+树索引。B+树索引是一种基于B树的索引结构,相对于B树索引,具有更高的查询效率和更好的存储能力。Hash索引是一种利用哈希函数进行索引的结构,适用于等值查询和查询范围较小的场景,但是不支持范围查询和排序操作。

B+树索引

B+ 树是基于B 树和叶子节点顺序访问指针进行实现,它具有B树的平衡性,并且通过顺序访问指针来提高区间查询的性能。

在 B+ 树中,节点中的 key 从左到右递增排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,则该指针指向节点的所有 key 大于等于 keyi 且小于等于 keyi+1。

进行查找操作时,首先在根节点进行二分查找,找到key所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出key所对应的数据项。

Hash索引和B+树索引的区别

Hash索引和B+树索引在实现上有很大的区别。Hash索引是通过哈希函数将索引列的值映射到一个哈希表中,然后在哈希表中查找对应的数据。这种方式可以快速定位到数据,但是对于范围查询和排序操作不太友好。而B+树索引是一种多层平衡树结构,可以通过二分查找快速定位到数据。相对于Hash索引,B+树索引支持范围查询和排序操作,适用范围更广。

为什么B+树比B树更适合实现数据库索引?

B+树相对于B树具有更好的存储和查询效率。首先,B+树的非叶子节点不保存数据,只保存关键字,因此可以容纳更多的关键字,从而减少树的高度,提高查询效率。其次,B+树的叶子节点通过指针连接形成了一个有序的链表,可以方便地进行范围查询和排序操作。此外,B+树对于磁盘I/O的利用率也更高,因为B+树每次读取的都是整个节点,相对于B树更加高效。

索引的分类

索引可以根据不同的特征进行分类,常见的分类有聚集索引和非聚集索引、唯一索引和非唯一索引、单列索引和多列索引等。

最左匹配原则

最左匹配原则是指对于复合索引,查询时只能使用从左到右的部分列作为查询条件,不能跳过其中的列。例如,对于索引(a,b,c),只能按照(a)、(a,b)和(a,b,c)的顺序使用,不能仅使用(b,c)或(c)。

聚集索引

聚集索引是一种特殊的索引方式,它的索引顺序与物理顺序一致,即数据按照索引顺序进行存储。聚集索引可以有效地提高数据的查询速度,因为它可以直接定位到数据所在的物理位置。在MySQL中,每个表只能有一个聚集索引,通常是主键索引。

覆盖索引

覆盖索引是指查询语句可以通过索引直接获取所需的数据,而不必访问数据表,从而提高查询效率。例如,对于查询语句SELECT id FROM table WHERE name='abc',如果表中存在(name,id)的复合索引,则查询可以直接在索引上完成,不必访问表中的其他列,从而提高查询速度。

索引的设计原则

在设计索引时,需要考虑以下几个原则:

  • 尽量选择区分度高的列作为索引列,以减少索引的重复率。
  • 尽量选择数据量小的列作为索引列,以减少索引的空间占用。
  • 尽量选择频繁查询的列作为索引列,以提高查询效率。
  • 避免使用过多的索引,因为过多的索引会增加维护成本,并且可能会影响写操作的性能。
  • 对于复合索引,需要根据最左匹配原则选择索引列。
  • 对于聚集索引,通常选择主键作为聚集索引。
  • 对于覆盖索引,需要根据查询语句的需求选择索引列。

索引什么时候会失效?

索引会失效的情况主要包括以下几种:

  • 查询条件中使用了函数或表达式,导致无法使用索引。
  • 查询条件中使用了不等于(<>)操作符或者不在(NOT IN)操作符,也可能导致无法使用索引。
  • 查询条件中使用了模糊匹配操作符(LIKE),如果匹配字符串以通配符开头,也可能导致无法使用索引。
  • 查询条件中使用了OR操作符,如果OR操作符的两侧都有可用的索引,则可以使用索引,否则无法使用索引。
  • 索引列上的数据类型与查询条件的数据类型不一致,导致无法使用索引。
  • 表中数据分布不均匀,导致索引失效。

什么是前缀索引?

前缀索引是指只对索引列的一部分进行索引,从而减少索引的空间占用。例如,对于VARCHAR类型的列,可以只对其前几个字符进行索引。前缀索引的缺点是精度不够高,可能会导致查询结果不准确。

索引下推是什么?

请大家移步Mysql中到底什么是索引下推,一分钟看懂(文末送书)

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

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

相关文章

( 数组和矩阵) 565. 数组嵌套 ——【Leetcode每日一题】

❓565. 数组嵌套 难度&#xff1a;中等 索引从 0 开始长度为N的数组 A&#xff0c;包含 0 到 N - 1 的所有整数。找到最大的集合 S并返回其大小&#xff0c;其中 S[i] {A[i], A[A[i]], A[A[A[i]]], ... } 且遵守以下的规则。 假设选择索引为 i 的元素 A[i] 为 S 的第一个元…

【Java|golang】1003. 检查替换后的词是否有效

给你一个字符串 s &#xff0c;请你判断它是否 有效 。 字符串 s 有效 需要满足&#xff1a;假设开始有一个空字符串 t “” &#xff0c;你可以执行 任意次 下述操作将 t 转换为 s &#xff1a; 将字符串 “abc” 插入到 t 中的任意位置。形式上&#xff0c;t 变为 tleft “…

【软考高项笔记】第1章 信息化发展1.3 现代化创新发展

1.3 现代化创新发展 1.3.1 农业农村现代化 采棉机&#xff0c;传感器检查温度湿度 乡村振兴战略 建设基础设施 发展智慧农业 建设数据乡村1.3.2 两化融合与智能制造&#xff08;工业&#xff09; 信息化 工业化 发展战略 坚持自主可控&#xff0c;安全高效&#xff0c;推进产业…

VESC操作入门——双轮毂电机控制和CAN通信

目录 一、VESC驱动轮毂电机1.1、硬件准备1.2、硬件接线1.3、校准电机1.4、主操作界面 二、CAN通信2.1、硬件连接2.2、代码说明2.3、发送指令 三、双轮毂电机3.1、校准第二个电机参数3.2、硬件连接3.3、CAN总线发送指令 四、把VESC做为USB转CAN模块 ODrive、VESC和SimpleFOC 教程…

【星戈瑞】Sulfo-Cyanine5 mal 磺酸跟水溶性生物标记试剂

水溶性Sulfo-Cyanine5 mal是一种用于生物标记和荧光成像的荧光染料。它的化学名称是Cyanine5 maleimide&#xff0c;分子式为C29H27ClN2O4S&#xff0c;分子量为576.05。Cyanine5 mal属于Cyanine染料家族&#xff0c;具有强烈的吸收和发射光谱&#xff0c;适用于生物分子的标记…

( 数组和矩阵) 769. 最多能完成排序的块 ——【Leetcode每日一题】

❓769. 最多能完成排序的块 难度&#xff1a;中等 给定一个长度为 n 的整数数组 arr &#xff0c;它表示在 [0, n - 1] 范围内的整数的排列。 我们将 arr 分割成若干 块 (即分区)&#xff0c;并对每个块单独排序。将它们连接起来后&#xff0c;使得连接的结果和按升序排序后…

云服务器vCPU和CPU有什么区别?

云服务器的vCPU和物理服务器的CPU有什么区别&#xff1f;阿里云百科以阿里云服务器ECS为例&#xff0c; 阿里云服务器vCPU和CPU是什么意思&#xff1f;CPU和vCPU有什么区别&#xff1f;一台云服务器ECS实例的CPU选项由CPU物理核心数和每核线程数决定&#xff0c;CPU是中央处理…

推荐算法实战项目:FNN 原理以及案例实战(附完整 Python 代码)

本文要介绍的是FNN模型&#xff0c;出自于张伟楠老师于2016年发表的论文《Deep Learning over Multi-field Categorical Data》。 论文提出了两种深度学习模型&#xff0c;分别叫做FNN&#xff08;Factorisation Machine supported Neural Network&#xff09;和SNN&#xff0…

如何利用 Kotlin 特性封装 DataStore

Jetpack DataStore是一种数据存储解决方案&#xff0c;由于使用了 Kotlin 协程或者 RxJava 以异步、一致的事务方式存储数据&#xff0c;用法相较于其它存储方案 (SharedPreferences、MMKV) 会更加特别&#xff0c;所以目前网上都没有什么比较好的 DataStore 封装。 个人了解了…

(十)Shapefile文件创建——创建Shapefile和dBASE

&#xff08;十&#xff09; Shapefile文件创建——创建Shapefile和dBASE ArcCatalog 可以创建新的 Shapefile 和 dBASE表&#xff0c;并可进行属性项及索引的操作定义 Shapefile 的坐标系统。当在目录中改变 Shapefile 的结构和特性 (Properties)时必须使用 ArcMap 来更新或重…

动态规划 --- 01背包

动态规划 — 01背包 一直到现在都非常害怕动态规划&#xff0c;因为基本上自己都无法想出dp递推式&#xff0c;太难受了 T.T 今天再一次遇到了需要写01背包的情况&#xff0c;根据自己学习的一点点经历&#xff0c;再稍微总结一下01背包吧&#xff0c;虽然是个被认为dp入门的…

自学Python必须知道的优秀社区

国内学习Python网站&#xff1a; 知乎学习平台&#xff1a;Python - 基础入门 - 知学堂黑马程序员视频库&#xff1a;大数据学习路线2023版-黑马程序员大数据学习路线图菜鸟教程&#xff1a;菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01;极客学院&#xff1a;极…

香港服务器租用攻略:如何优化用户体验?

服务器是网站、应用程序和其他在线内容的核心&#xff0c;对于在线业务来说是至关重要的。如今&#xff0c;随着互联网的普及和数字化转型&#xff0c;越来越多的企业选择在香港租用服务器&#xff0c;以满足其业务需求。但是&#xff0c;租用服务器并不仅仅是选择一个服务商并…

让chatGPT给我写一个CSS,我太蠢了

前言 CSS这东西&#xff0c;让AI写的确有点难度&#xff0c;毕竟它写出来的东西&#xff0c;没办法直接预览&#xff0c;这是其次。重要的是CSS这东西怎么描述&#xff0c;不好描述啊&#xff0c;比如我让他给我制作一个这样的效果出来&#xff0c;没办法描述&#xff0c;所以…

AcWIng1085. 不要62(数位DP)

文章目录 一、问题二、分析三、代码 一、问题 二、分析 这道题涉及的算法是数位DP。如果大家不懂数位DP的话&#xff0c;可以先去看作者之前的文章&#xff1a;第五十章 动态规划——数位DP模型 假设一个数 n n n&#xff0c;我们先求出从 1 1 1到 n n n当中&#xff0c;所有…

《花雕学AI》如何用ChatGPT提升工作效率:适合不同场合的实用技巧大全

实用技巧分类目录 一、最佳ChatGPT 4提示 二、最佳写作和内容创作ChatGPT提示 三、最佳趣味性ChatGPT提示 四、最佳网络开发的ChatGPT提示 五、最佳音乐主题ChatGPT提示 六、最佳职业主题ChatGPT提示 七、最佳用于教育的ChatGPT提示 八、最佳用于市场营销的ChatGPT提示 九、最…

MEET开发者 | 选择和努力一样重要,专访杭州三汇测试工程师齐雪莲

「MEET开发者」栏目的第二期嘉宾是来自杭州三汇的测试工程师——齐雪莲。她是从小在新疆长大的甘肃人&#xff0c;10岁的时候回到了甘肃&#xff0c;大学又考回了新疆&#xff0c;在塔里木大学就读计算机科学与技术专业。 毕业后齐雪莲入职了三汇新疆办事处任测试一职&#xff…

电脑没有网络连接怎么办 电脑无法连接网络怎么解决

这个问题至少困扰我一周 目录 电脑没有网络连接怎么办? 方法一 方法二 方法三 方法四 方法五 方法六 电脑没有网络连接怎么办? 其中也包括了改IP。。电脑就是不好使 #include <iostream> using namespace std; int main(){system("netsh interface ip s…

日志收集系统:将应用产生的数据通过flume收集后发送到Kafka,整理后保存至hbase

目录 前言&#xff1a;功能描述 第一步&#xff1a;flume拉取日志数据&#xff0c;并将源数据保存至Kafka flume配置文件&#xff1a; users&#xff1a; user_friends_raw&#xff1a; events&#xff1a; train&#xff1a; 第二步&#xff1a;Kafka源数据处理 方式一…

滚珠螺杆在设备上的应用

滚珠螺杆跟直线导轨一样&#xff0c;是很多机械设备上不可或缺的重要部件&#xff0c;它是确保机器能够具备高加工精度的前提条件&#xff0c;因此本身对于精度的要求也相当地高。今天&#xff0c;我们就来了解一下滚珠螺杆在不同设备上的应用吧&#xff01; 1、大型的加工中心…