版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1415485
这是杂货铺的第447篇文章
背景:
按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。
前言《Introduction to Oracle Database》的历史文章:
第二章《Tables and Table Clusters》 历史文章:
本文主题:第二章《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之间的每一个可能的值都做哈希。因为没有索引,数据库就必须执行一次全表扫描。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有