目录
数据库索引的力量
举个例子怎么样?
一副扑克牌
由数据库使用的B +树索引
数据库索引允许查询有效地从数据库中检索数据。索引与特定表相关,由一个或多个键组成。一个表可以有多个索引。键是我们想要在索引中查找的值的特定术语。键基于表的列。通过将键与索引进行比较,可以找到具有相同值的一个或多个数据库记录。
由于索引大大加快了数据检索速度,因此必须为每个表定义正确的索引。对于小型数据库,不会注意到缺少索引,但请放心,一旦表的大小增加,查询将花费更长时间。
数据库索引的力量我曾经在一个数据库上工作,一系列操作大约需要8天才能完成。通过查看运行时间最长的查询并通过查询计划生成器运行它们,我们意识到数据库可以从新索引中受益。优化器估计查询成本将从300,000次操作降至30次!我们实现了索引并将整个操作从8天缩短到2小时。不用说,我们很高兴能够提升性能。
举个例子怎么样?对于此示例,请考虑书背面的索引。它使用起来非常简单。只需扫描您感兴趣的主题,注意,然后翻到书中的那些页面。
该索引的键是我们引用的主题词。索引条目由键和页码组成。键按字母顺序排列,这使我们可以轻松扫描索引,查找条目,记录页面,然后将书籍翻转到正确的页面。
考虑另一种选择。没有索引的书可能会在每页的底部列出主题词。有了这种类型的系统,要找到你感兴趣的主题,你就必须翻阅整本书。这使得查找主题真的很慢!
只有到达书的最后,你才知道你已经看过关于这个主题的每一页。
索引的强大之处在于,您可以或多或少地直接访问您感兴趣的书籍页面。实际上,这可以节省数小时的页面翻转!
一副扑克牌考虑到你有一副52张牌:四套,Ace到King。如果牌组被随机排列,我要求你挑出8个红桃,这样你就可以单独翻转每张牌,直到找到它为止。平均而言,你必须通过一副扑克牌的一半,就是26张牌。
现在,相反的,考虑我们将牌分成四堆,每一堆随机洗牌。现在,如果我要求你挑出红桃中的8个,你首先要选择红桃堆,平均需要两个才能找到,然后翻过13张牌。平均而言,如果需要七次翻转,那么共计九次。这比仅扫描整个甲板快17次(26-9)。
我们可以更进一步,将每堆分成两组(一组Ace到6,另一组7到King)。在这种情况下,平均搜索将减少到6。
这是指数的力量。通过在键上分离和排序数据,我们可以使用堆积方法大幅减少查找数据所需的翻转次数。
由数据库使用的B +树索引用于存储数据库索引的结构称为B + 树。B +树的工作方式类似于我们之前谈到的卡片分类策略。在B +树中,键值被分成许多较小的堆。顾名思义,堆,技术上称为节点,以树状方式连接。是什么让B +树嘶嘶作响,就是对于树中的每一堆,与你正在查找的值进行比较非常容易和快速,并转到下一个堆栈。每一堆都大大减少了你需要扫描的物品数量;实际上是指数级的。
通过这种方式,通过沿着节点向下走,沿着路径进行比较,我们可以避免扫描数千个记录,只需几个简单的节点扫描。希望这个图有助于说明这个想法......
在上面的示例中,考虑您需要检索与键值15对应的记录。为此,进行以下比较:
- 它确定15小于40,所以我们遍历“To Values = 10和
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?