可以使用 HashTables 在数据库中创建索引吗?创建索引的理想数据结构是什么?如果一个表有一个外键引用其他数据库中的一个字段,如果我们在外键上创建索引会有帮助吗?
2 回答
可以使用 HashTables 在数据库中创建索引吗?
有些 DBMS 支持基于散列的索引,有些则不支持。
创建索引的理想数据结构是什么?
没有一个数据结构占用 0 个字节,也不能在 0 个 CPU 周期内对其进行操作,因此没有一个数据结构是“理想的”。我们,软件工程师,要决定哪种数据结构对我们试图实现的特定目标具有最大的好处和最小的损害。
例如,B 树对范围扫描很有用,而哈希索引则不然。这是否意味着 B 树“更好”?好吧,如果您需要范围扫描,它们是,但如果您不需要,则不一定是。
如果一个表有一个外键引用其他数据库中的一个字段,如果我们在外键上创建索引会有帮助吗?
您通常不能拥有指向另一个数据库的外键,只有另一个表。
是的,它往往会有所帮助,因为每次在父表中更新或删除一行时,都需要搜索子表以查看是否违反了 FK。这种搜索可以显着受益于这样的索引。许多(但不是全部)DBMS 需要 FK 上的索引(如果还没有,甚至可能会自动创建它)。
OTOH,如果您只向父表添加行,您可以考虑在 FK 字段上保留子表未索引(假设您的 DBMS 允许您这样做)。
甲骨文观点
Oracle 支持按散列值进行集群,无论是针对单个表还是多个表。这在物理上将具有相同散列值的行放在集群列中,并且比通过索引访问更快。由于增加的复杂性和对预先计划的一定需要,存在一些缺点。
您还可以使用基于函数的索引来根据应用于一个或多个列的哈希函数进行索引。我不确定这样做的好处是什么。
由于明显的性能优势,Oracle 中的外键列通常受益于索引。