您当前的位置: 首页 >  数据库

寒冰屋

暂无认证

  • 1浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数据库索引解释

寒冰屋 发布时间:2019-09-12 21:24:33 ,浏览量:1

目录

数据库索引的力量

举个例子怎么样?

一副扑克牌

由数据库使用的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对应的记录。为此,进行以下比较:

  1. 它确定15小于40,所以我们遍历“To Values = 10和
关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0447s