用于在数据库中创建索引的数据结构

时间:2013-06-04 09:51:46

标签: database database-design

可以使用HashTables在数据库中创建索引吗?创建索引的理想数据结构是什么? 如果一个表有一个外键引用其他数据库中的字段,如果我们在外键上创建索引会有帮助吗?

2 个答案:

答案 0 :(得分:1)

  

可以使用HashTables在数据库中创建索引吗?

有些DBMS支持基于散列的索引,有些则不支持。

  

创建索引的理想数据结构是什么?

没有数据结构占用0个字节,也不能在0个CPU周期内操作,因此没有数据结构是“理想的”。我们软件工程师决定哪种数据结构对我们正在努力实现的具体目标有最大的好处和最少的损害。

例如,B-Trees对范围扫描很有用,而散列索引则不行。这是否意味着B树“更好”?好吧,如果你需要范围扫描,它们就是你的,但如果你不需要,则可能不一定。

  

如果一个表有一个外键引用其他数据库中的字段,那么如果我们在外键上创建索引会有帮助吗?

您通常不能拥有另一个数据库的外键,只能拥有另一个表。

是的,它往往会有所帮助,因为每次在父表中更新或删除行时,都需要搜索子表以查看是否违反了FK。此搜索可以从这样的索引中获益。许多(但不是全部)DBMS在FK上需要索引(如果还没有,可能会自动创建它)。

OTOH,如果你只向父表添加行,你可以考虑让子表在FK字段上保持未编入索引(假设你的DBMS允许你这样做)。

答案 1 :(得分:0)

Oracle Perspective

Oracle支持通过哈希值进行群集,适用于单个或多个表。这物理地共存具有与簇列相同的散列值的行,并且比通过索引访问更快。由于复杂性增加和预先计划的某些需要,存在缺点。

您还可以使用基于函数的索引来根据应用于一列或多列的哈希函数进行索引。我不确定那会带来什么好处。

由于明显的性能优势,Oracle中的外键列通常可以从索引中受益。