中国建设官方网站,如何创建自己的软件,公众号的运营地区,做网站如何分类前言
通过本篇博客的学习#xff0c;我希望大家可以了解到 “索引” 是为了提高数据的查询效率。
索引的介绍
索引是为了提高查询数据效率的数据结构 索引#xff08;index#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外#xff0c;数据库系统还维护着…前言
通过本篇博客的学习我希望大家可以了解到 “索引” 是为了提高数据的查询效率。
索引的介绍
索引是为了提高查询数据效率的数据结构 索引index是帮助MySQL高效获取数据的数据结构(有序)。在数据之外数据库系统还维护着满足 特定查找算法的数据结构这些数据结构以某种方式引用指向数据 这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引。 索引的作用 如下图所示学生表 student 执行一条sql语句查询名为郑家谋 的出生年月日 select birthday from student where stuName郑家谋; 在不使用索引的情况下我们要进行全文检索。 数据是一条条查找 和目标条件比对直到找到为止这样的效率无疑是比较慢的。 也是因为如此后面推出了索引。 那么索引是怎么样的呢 在这里我先提一下索引是一个Btree 类型的数据结构 在这里暂时把Btree看作一个平衡二叉树。我们知道 平衡二叉树的特点 左子结点小于根节点根节点小于右子结点左右高度相差最大相差一 在我们查询数据时我们拿目标数据首先比较根结点存储的数据如果比它大就舍弃左子结点和右子结点比较如果比它小和左子节点比较。以此类推每次都舍弃一部分这样查询效率就高了。 但实际上Btree 数据结构 是在平衡二叉树的基础上不仅保留了平衡二叉树的优点同时也弥补了平衡二叉树的缺点。这个具体在下一篇博客讲Btree的结构时详细叙述。 索引的特点
优势 劣势 提高数据检索的效率降低数据库的IO成本索引列也是要占用空间的通过索引列对数据进行排序降低数据排序的成本降低CPU的消耗。索引大大提高了查询效率同时却也降低更新表的速度 如对表进行INSERT、UPDATE、DELETE时效率降低。
现在我们对索引的优势/劣势详细的分析
优势
提高数据检索的效率降低数据库的IO成本
理解
我们可以把我们使用的数据库图形化界面工具如datagrip 等 看作客户端。我们执行的每一条SQL语句都可以看作向数据库服务器发送请求。服务器使用IO流读取数据如果不使用索引就需要去读全部的内容。这样会消耗大量的IO资源。称为全表扫描全文检索如果使用索引就只需要读取目标数据。降低了数据从磁盘硬盘读取到内存这样读取的数据量减少 疑问在数据库查询数据数据是从 磁盘读取到内存(最先查到结果存储数据的不是在硬盘上吗不应该从硬盘上读取吗
如果大家有像我一样的疑惑以下是我 查到资料后的理解 1 硬盘和磁盘的关系 磁盘包括硬盘也是可以存储数据的。在非技术上磁盘和硬盘可以统一理解都把它看成硬盘。在数据库中也是如此。 2 数据库查询数据的过程 当数据库接收到一个查询请求时它会首先检查所需的数据是否已经在内存缓存中。如果数据已经在内存中数据库可以直接从内存中读取数据这通常比从硬盘读取要快得多。如果数据不在内存中数据库需要从硬盘上读取数据。这个过程称为“页缺失”page miss数据库会从硬盘上读取数据页到内存中然后从内存中提供给处理器。 通过索引列对数据进行排序降低数据排序的成本降低CPU的消耗
理解 索引通常是有序的这意味着数据已经被排序。如果查询请求需要返回排序后的结果数据库可以直接利用索引的有序性来快速返回排序后的数据而不需要额外的CPU资源来对数据进行排序。 劣势
索引列也是要占用空间的
理解 索引是一个数据结构因此在硬盘中存储的不仅有数据库数据还有索引数据。加大硬盘存储空间的占有 索引大大提高了查询效率同时却也降低更新表的速度 如对表进行INSERT、UPDATE、DELETE时效率降低。
理解 虽然索引可以加快查询速度但它们也会减慢数据的插入、更新和删除操作的速度。 原因如下 我认为索引本质上是为了查询表数据服务的为了提高查询效率。因此当数据发生变化时如插入、更新或删除数据库系统不仅需要更新表中的数据还需要更新所有相关的索引以保持数据的一致性。这个过程需要额外的时间和资源尤其是在有大量索引或大量数据变动的情况下。 总的来说索引是提高数据库查询效率的重要工具但它们也带来了额外的存储和维护成本。在设计数据库时需要根据具体的应用场景和需求来权衡是否使用索引以及该如何设计索引。
本篇博客简单的介绍了索引下一篇博客详细将索引的结构