【发布时间】:2021-04-14 22:12:58
【问题描述】:
我正在阅读有关 Oracle 数据库索引的内容,但有些地方我无法理解,为什么我们需要密集索引,尤其是在唯一列的密集索引的情况下?事实上,我们的数据库表上的每个条目都有一个密集索引条目,这使得搜索索引表或数据库表的 I/O 成本相同,在我看来,这并没有优化我们的 DBMS,我确信我错过了关于密集索引如何工作的一点,但我确实搜索了 Oracle 文档,但没有找到对我的问题的适当回应。
好的,我明白了,在非唯一键的情况下使用密集索引,但我真正的问题是如何使用它来获得唯一键的性能?在唯一键密集索引的情况下访问密集索引上的条目和访问数据库条目之间有什么区别,因为它们具有相同数量的条目?
编辑:
在密集索引中,为数据库中的每个搜索关键字创建一条记录。这可以帮助您更快地搜索,但需要更多空间来存储索引记录。在这个索引中,方法记录包含搜索键值并指向磁盘上的真实记录。
【问题讨论】:
-
什么是密集索引?
-
实际上,对于 可为空的列,Oracle B-tree 索引不是dense,因为并非所有行都被索引。
-
与其在理论上苦苦挣扎,不如简单地创建一个只有几 M 行的表,在 ID 上创建一个索引,并将查询
select * from tab where id =1的性能与从表中选择所有数据的查询进行比较; ) 前者将访问 2-3 个索引块和一个表块,后者将访问大量表块。这是解释吗? -
我已经编辑了我的问题,以便包含一个密集的索引定义@WernfriedDomscheit。
-
@MarmiteBomber,我会这样做,但实际上我想要的是理解这个概念,我知道使用索引会优化性能,但我想知道如何做到这一点。跨度>
标签: sql database oracle indexing