版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1423763
背景:
按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。
前言《Introduction to Oracle Database》的历史文章:
第二章《Tables and Table Clusters》 历史文章:
《《Oracle Concept》第二章 - 21 (12c内容补充)》
《《Oracle Concept》第二章 - 20 (12c内容补充)》
本文主题:第二章《Tables and Table Clusters》 - Overview of Tables,以下是12c内容补充。
线性排序的属性聚簇表
表的线性排序方案会基于用户对属性指定的特定顺序对行进行排序。Oracle支持单表或者通过主外键关联的多表线性排序。
例如,sales表可以按照cust_id和prod_id列进行分割,然后在磁盘上对这些范围值聚簇。当你为表指定BY LINEAR ORDER,而谓词中包含指令的前导列或者所有列,就会极大地降低I/O。
假设sales的检索经常指定客户ID或者客户ID和产品ID的组合。就能创建一张属性聚簇表,这样的检索就会节省I/O的成本:
使用cust_id和prod_id组合列的检索,或者使用前缀cust_id的检索,都会节省I/O成本。仅使用prod_id列不会节省I/O,因为prod_id是BY LINEAR ORDER子句的后缀。如下示例展示了数据库在表扫描中如何降低I/O。
应用使用如下的检索,因为sales表是BY LINEAR ORDER聚簇,数据库仅会读取包含cust_id值是100的区,
应用使用如下的检索,因为sales表是BY LINEAR ORDER聚簇,数据库仅会读取包含cust_id值是100以及prod_id值是2300的区,
可以参考:
《Oracle Database Data Warehousing Guide》了解如何使用线性排序聚簇表。
《Oracle Database SQL Language Reference》了解BY LINEAR ORDER子句的语法和语义。
交错排序的属性聚簇表
交错排序使用一种类似Z-排序的技术。交错排序会基于聚簇列的谓词子集降低I/O。交错排序对于数据仓库中的多维度结构非常有用。
除了线性排序的属性聚簇表,Oracle支持基于单表或者通过主外键关联的多表的交错排序。除了属性聚簇表外的其他表列必须通过外键关联和属性聚簇表连接。
大型数据仓库通常用星型模式组织数据。维度表使用父子结构,通过外键和事实表连接。通过交错排序聚簇一张事实表会让数据库使用一个特殊的函数在表扫描期间跳过维度列的值。
示例2-10 交错排序示例
假设你的数据仓库包含一张sales事实表,他的两张维度表:customers和products。大多数检索会含有customers表结构中的谓词(cust_state_province和cust_city),以及products表结构中的谓词(prod_category和prod_subcategory)。你能用示例中展示的部分语句对sales表进行交错排序。
注意:
在BY INTERLEAVED ORDER子句中指定的列不需要在真实的维度表,但是他们必须通过主外键进行关联。
假设某个应用检索了用join连接的sales、products和customers表。如下所示,检索会在谓词中指定customers.prod_category和customers_cust_state_province列:
在之前的检索中,prod_category和cust_state_province列是展示在CREATE TABLE的部分聚簇定义。在sales表检索期间,数据库会访问区映射,仅访问这个区的rowid。
可以参考:
《Overview of Dimensions》章节。
《Oracle Database Data Warehousing Guide》了解如何使用交错排序聚簇表。
《Oracle Database SQL Language Reference》了解BY NTERLEAVED ORDER子句的语法和语义。