为什么SQL语句命中索引比不命中索引要快?
有位粉丝面试高开的语引比引快时候被问到,为什么SQL语句命中索引比不命中索引要快?句命虽然自己也知道答案,但被问到的中索中索瞬间,就不知道如何组织语言了。不命今天,语引比引快我给大家深度分析一下。句命
1.索引的中索中索作用想象一下,现在有一本包含几十万字的不命字典,有几百页厚,语引比引快同时里面的句命字是无序排列的。如果在不使用目录的中索中索情况下,我们如何从字典中找出需要的不命字来呢?毫无疑问,我们只能一页一页地翻,语引比引快显然,句命这是中索中索一项反人类的的工作。

我们必然想的是先看目录,然后,找到相关的字或者偏旁,然后,源码下载找到对应的页码再去查找想要找的文字,这样,效率就大大提高了。而事实上,目录就是一种索引,我们说的数据库索引思想和目录的思想一脉相承。
数据库索引最主要的作用就是帮助我们快速检索到想要的数据,从而不至于每次查询都做全局扫描。
假设不使用任何算法的情况下,我们要查询10万条记录中的某一条,在最坏的情况下需要遍历10万次。

但如果使用二分查找算法,则只需要进行log2 20000次,也就是14.287712次即可。这意味着我们只需对排序后的值进行14次搜索,就可以使用二分查找到想要的唯一值,常见的索引数据结构有B树和B+树。
下面我们,云服务器提供商以MySQL的InnoDB引擎为例,分析一下索引的工作原理。
2.索引执行原理我们知道MySQL的InnoDB引擎采用的是B+树数据结构,当我们去执行SELECT语句查询数据的时候,InnoDB需要从磁盘上去读取数据,而这个过程会涉及到磁盘 以及磁盘的随机IO ,我们来看这么一个图:

系统会把数据的逻辑地址传给磁盘,磁盘控制线路按照寻址逻辑把逻辑地址翻译成物理地址。也就是确定要读取的数据在哪个磁道、哪个扇区。为了读取这个扇区的数据,需要把磁头放在这个扇区上面,为了实现这样一个点,磁盘会不断地去旋转。把目标扇区旋转到磁头下面,使得磁头能够去找到对应的磁道。这里还会涉及到寻道的时间以及旋转时间的一个损耗。很明显磁盘IO这个过程的性能开销是免费源码下载非常大的,尤其是查询的数据量比较多的情况下。
所以InnotDB里面,干脆对存储在磁盘上的数据建立一个索引,然后把索引数据以及索引列对应的磁盘地址以B+树的方式进行存储。来看这么一个图:

当我们需要查找目标数据的时候,根据索引从B+树中去查找目标数据就行了。由于B+树的子树比较多,所以,只需要较少次数的磁盘IO就能够查找到目标数据。
至于B+树的数据结构,在这里就不分析了。大家可以去我的个人主页看往期视频有讲到。
3.索引的弊端虽然,使用索引能减少磁盘IO次数,提高查询效率,但是,索引也不能建立太多。如果一个表中所有字段的索引很大,也会导致性能 l下降。想象一下,如果一个索引和一个表一样长,那么它将再次成为一个需要检查的开销。这就好比字典的目录非常详细,但是其长度已经和所有的文字一样长,这个时候目录本身的效率就大大下降了。
那索引有弊端吗?肯定是有的,索引可以提高查询读取性能,而它会将降低写入性能。当有索引时,如果更改一条记录,或者在数据库中插入一条新的记录,它将执行两个写入操作(一个操作是写入记录本身,另一个操作是将更新索引)。

因此,在定义索引时,必须牢记以下几点:
索引表中的每个字段将降低写入性能。建议使用表中的唯一值为字段编制索引。在关系数据库中充当外键的字段必须建立索引,因为它们有助于跨多个表进行复杂查询。索引还使用磁盘空间,因此在选择要索引的字段时要小心。相关文章
- 摘要:在计算机使用中,有时我们需要安装两个不同的操作系统,以满足不同的需求。而使用U盘来装双系统是一种简单方便的方法,本文将为大家详细介绍如何使用U盘装双系统。文章目录:1....2025-11-04
 
2月6日 消息:谷歌科技孵化器Jigsaw发布了一个名为Assembler的实验平台,可以帮助记者和一线事实核查人员快速核实图像。据介绍,Assembler结合了学术界现有的几种技术来检测常见的操作技2025-11-04
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。图片来自 PexelsNginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消2025-11-04
了解如何运用Python的某些数据对象,有利于保持井然有序的状态,避免在处理数据科学项目中的大量数据时出错。在数据科学项目中,有时想跟踪数据信息,或者希望灵活、快速、轻松地更新数据的全新输入。为此,小2025-11-04如何利用电脑表格进行打印?(一步步教你掌握新手电脑表格打印技巧)
摘要:在现代社会中,电脑表格的使用已经变得非常普遍。然而,对于新手来说,学会如何利用电脑表格进行打印可能有些困难。本文将详细介绍如何使用电脑表格进行打印的步骤和技巧,帮助新手快速掌握这项...2025-11-04
据不完全统计,工业级别的代码,几乎有三分之二都是在处理异常情况。跟很多面试官聊过,在面试中如何考察一个应试者的思维是否周全,比较好的方法就是考察他是否能够思考周全,想到所有异常情况的处理方案。相信大家2025-11-04

最新评论