首页
学习
活动
专区
圈层
工具
发布

《Oracle Concept》第二章 - 17

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1415485

这是杂货铺的第447篇文章

背景:

按照《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》第二章 - 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。

创建哈希聚簇

聚簇键,就像索引聚簇键一样,是聚簇中各张表共享的一个单独的列或复合键。哈希键值是插入聚簇键列的真实值或可能的值。例如,如果聚簇键是department_id,那么哈希键值可能是10、20、30,等等。

Oracle数据库使用一个哈希函数,他可以接受无限个哈希键值作为输入,对他们排序分到一组有限个数的桶(bucket)中。每个桶会有一个唯一的数值类型ID,叫做哈希值。每个哈希值会映射到数据库中存储这个哈希键值(department是10、20、30,等等)对应的数据行所在的块地址上。

为了创建一个哈希聚簇,可以用创建索引聚簇一样的CREATE CLUSTER语句,只是增加一个哈希键。聚簇中哈希值的个数取决于哈希键。在下面的2-9示例中,department的个数可能有100个,所以哈希键设置100,

在创建employees_departments_cluster后,就能在聚簇中创建employees和departments表。然后将数据加载到哈希聚簇中,就像索引聚簇的用法一样,

参考:

《Oracle Database Administrator's Guide》可以了解如何创建和管理哈希聚簇。

哈希聚类检索

要明确的是,是数据库,而不是用户,决定如何对用户输入的键值做哈希。例如,假设用户经常执行如下的检索,输入不同的department部门ID字段p_id:

如果用户要检索department_id=20的雇员,数据库会将此值哈希成77号桶。如果用户要检索department_id=10的雇员,数据库会将此值哈希成15号桶。数据库会用这个内建的哈希值来定位包含请求部门内雇员信息的数据块。下图描述了一个哈希聚簇段作为一组行的数据块。正如图中所示,一次检索只要一次物理IO。

哈希聚簇的限制就是无法在非索引的聚簇键上执行范围扫描(参考“索引范围扫描”一章)。假设哈希聚簇中没有独立的索引,检索ID值在20和100之间的department部门,就不能用哈希算法,因为无法将20和100之间的每一个可能的值都做哈希。因为没有索引,数据库就必须执行一次全表扫描。

下一篇
举报
领券