当在Oracle中的单个表哈希集群中插入大量行时,它将使用散列到该哈希值的任何值填充该块,然后开始使用溢出块。
这些溢出块被列为主块链接,但我找不到有关它们分配或链接方式的详细信息。
当为散列值分配溢出块时,该块是专门分配给该散列值的,还是用作池的溢出块,然后可以使用相同的溢出块开始使用不同的散列值。
如何监控链的可用空间 - 因为,当数据继续插入时,是否必须遍历整个链以查明它是否在当前溢出链中有一些空闲空间,然后如果它找不到,然后它选择分配一个新的块?
答案 0 :(得分:1)
从Concepts Guide(向下滚动到“哈希群集存储”:
当用户将行插入到部门43的集群中时,数据库无法在块100中存储这些行,该块已满。数据库将块100链接到新的溢出块,比如块200,并将插入的行存储在新块中。块100和200现在都有资格存储任一部门的数据。如图2-7所示,对20或43部门的查询现在需要两个I / O来检索数据:块100及其关联的块200.
这意味着溢出块 专门分配给该哈希值。
我不知道你的第二个问题的答案。