《Oracle Concept》第二章 - 19

这是杂货铺的第459篇文章


背景:

按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。


前言《Introduction to Oracle Database》的历史文章

《Oracle Concept》前言-12c内容补充

《Oracle Concept》前言介绍-7

《Oracle Concept》前言介绍-6

《Oracle Concept》前言介绍-5

《Oracle Concept》前言介绍-4

《Oracle Concept》前言介绍-3

《Oracle Concept》前言介绍-2

《Oracle Concept》前言介绍-1

《Oracle Conecpt》 - 目录结构

《Oracle Conecpt》 - 初步认识1


第二章《Tables and Table Clusters》 历史文章

《Oracle Concept》第二章 - 18

《Oracle Concept》第二章 - 17

《Oracle Concept》第二章 - 16

《Oracle Concept》第二章 - 15

《Oracle Concept》第二章 - 14

《Oracle Concept》第二章 - 13

《Oracle Concept》第二章 - 12

《Oracle Concept》第二章 - 11

《Oracle Concept》第二章 - 10

《Oracle Concept》第二章 - 9

《Oracle Concept》第二章 - 8

《Oracle Concept》第二章 - 7

《Oracle Concept》第二章 - 6

《Oracle Concept》第二章 - 5

《Oracle Concept》第二章 - 4

《Oracle Concept》第二章 - 3

《Oracle Concept》第二章 - 2

《Oracle Concept》第二章 - 1


本文主题:第二章《Tables and Table Clusters》 - Overview of Tables。


哈希聚簇变量

单表哈希聚簇是一次仅支持一张表的哈希聚簇的优化版本。哈希键和行是一对一的映射关系。当用户通过主键需要快速访问表的时候,单表哈希聚簇是非常有用的。例如,用户会经常通过employee_id在employees表中检索雇员记录。


排序的哈希聚簇会根据哈希函数存储对应的行,数据库会按照顺序高效地返回记录。数据库内部会执行优化排序。对于通常需要对数据做排序的应用来说,这项技术能意味着更快的数据检索。例如,某个应用可能总要对orders表的order_date列进行排序。


参考:

Oracle Database Administrator's Guide》可以了解如何创建单表和排序的哈希聚簇。


哈希聚簇存储

Oracle数据库对于哈希聚簇的空间分配不同于索引聚簇。在示例2-9中,HASHKEYS指定了可能存在的部门个数,SIZE指定了和每个部门相关的数据容量。数据库会基于下面的公式计算出存储空间值:

HASHKEYS * SIZE / database_block_size


因此,在示例2-9,如果块大小是4096字节,那么数据库将会给哈希聚簇至少分配200个块。


Oracle数据库不会限制你能插入聚簇的哈希键值个数。例如,即使HASHKEYS是100,你还是可以在departments表中插入200个唯一的部门。然而,当哈希值的个数超过了哈希键的个数,哈希聚簇的检索效率会下降。


为了说明检索的问题,假设在下图2-7的块100完全存储了部门20的行。用户要向表departments插入一个新的department_id是43的部门。部门的个数超过了HASHKEYS值,所以数据库会将department_id=43哈希成值77,他和department_id=20是相同的哈希值。将多个输入值哈希成相同的一个值被称作哈希复数。

《Oracle Concept》第二章 - 19


当用户向43号部门的聚簇插入记录的时候,数据库不能将这些行存储在块100,因为他已经满了。数据库会将块100链接至一个新的溢出块,块200,将插入的行存储在这个新块中。块100和块200现在对于存储每个部门都是合适的。下面2-8图展示的,当出现哈希复数的时候,如何从哈希聚簇检索数据。图中,检索部门20或43的查询,现在都要两次I/O来提取数据:块100和他关联的块200。当然你能使用一个不同的HASHKEYS值重新创建聚簇来解决这个问题。

《Oracle Concept》第二章 - 19


参考:

Oracle Database Administrator's Guide》了解如何管理哈希聚簇的空间。