数据库索引解释

目录

数据库索引的力量

举个例子怎么样?

一副扑克牌

由数据库使用的B +树索引


数据库索引允许查询有效地从数据库中检索数据。索引与特定表相关,由一个或多个键组成。一个表可以有多个索引。键是我们想要在索引中查找的值的特定术语。键基于表的列。通过将键与索引进行比较,可以找到具有相同值的一个或多个数据库记录。

由于索引大大加快了数据检索速度,因此必须为每个表定义正确的索引。对于小型数据库,不会注意到缺少索引,但请放心,一旦表的大小增加,查询将花费更长时间。

数据库索引的力量

我曾经在一个数据库上工作,一系列操作大约需要8天才能完成。通过查看运行时间最长的查询并通过查询计划生成器运行它们,我们意识到数据库可以从新索引中受益。优化器估计查询成本将从300,000次操作降至30次!我们实现了索引并将整个操作从8天缩短到2小时。不用说,我们很高兴能够提升性能。

举个例子怎么样?

对于此示例,请考虑书背面的索引。它使用起来非常简单。只需扫描您感兴趣的主题,注意,然后翻到书中的那些页面。

该索引的键是我们引用的主题词。索引条目由键和页码组成。键按字母顺序排列,这使我们可以轻松扫描索引,查找条目,记录页面,然后将书籍翻转到正确的页面。

考虑另一种选择。没有索引的书可能会在每页的底部列出主题词。有了这种类型的系统,要找到你感兴趣的主题,你就必须翻阅整本书。这使得查找主题真的很慢!

只有到达书的最后,你才知道你已经看过关于这个主题的每一页。

索引的强大之处在于,您可以或多或少地直接访问您感兴趣的书籍页面。实际上,这可以节省数小时的页面翻转!

一副扑克牌

考虑到你有一副52张牌:四套,AceKing。如果牌组被随机排列,我要求你挑出8个红桃,这样你就可以单独翻转每张牌,直到找到它为止。平均而言,你必须通过一副扑克牌的一半,就是26张牌。

现在,相反的,考虑我们将牌分成四堆,每一堆随机洗牌。现在,如果我要求你挑出红桃中的8个,你首先要选择红桃堆,平均需要两个才能找到,然后翻过13张牌。平均而言,如果需要七次翻转,那么共计九次。这比仅扫描整个甲板快17次(26-9)。

我们可以更进一步,将每堆分成两组(一组Ace6,另一组7King)。在这种情况下,平均搜索将减少到6

这是指数的力量。通过在键上分离和排序数据,我们可以使用堆积方法大幅减少查找数据所需的翻转次数。

由数据库使用的B +树索引

用于存储数据库索引的结构称为B + 树。B +树的工作方式类似于我们之前谈到的卡片分类策略。在B +树中,键值被分成许多较小的堆。顾名思义,堆,技术上称为节点,以树状方式连接。是什么让B +树嘶嘶作响,就是对于树中的每一堆,与你正在查找的值进行比较非常容易和快速,并转到下一个堆栈。每一堆都大大减少了你需要扫描的物品数量;实际上是指数级的。

通过这种方式,通过沿着节点向下走,沿着路径进行比较,我们可以避免扫描数千个记录,只需几个简单的节点扫描。希望这个图有助于说明这个想法......

在上面的示例中,考虑您需要检索与键值15对应的记录。为此,进行以下比较:

  1. 它确定15小于40,所以我们遍历“To Values <40”分支。
  2. 由于15大于10但小于30,我们遍历“To Values> = 10<16 branch”

使用B +树结构,可以在树中表示数千条记录,其分支中的级别相对较少。由于查找次数与树的高度直接相关,因此必须确保所有分支的高度相等。这会在整个树中展开数据,从而更有效地查找任何范围内的数据。

由于数据在数据库中不断更新,因此B +树保持平衡非常重要。每次添加,删除记录或更新键时,特殊算法都会将数据和键值从一个块移到另一个块,以确保树中没有一个部分比另一个更高一级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值