《Oracle Concept》第二章 - 21 (12c内容补充)

这是杂货铺的第465篇文章


背景:

按照《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》第二章 - 20 (12c内容补充)

《Oracle Concept》第二章 - 19

《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,以下是12c内容补充。


使用区(Zone)降低I/O

一个区(Zone)表示的是一组连续的数据块,其中会存储相关列的最小值和最大值。当一条SQL语句包含存储在区中的列作为谓词,数据库就会在SQL执行期间用谓词的值和区中存储的最小和最大值进行比较,以此确定使用哪一个区。


SQL执行过程,会跳过不满足检索条件的数据对应的表或索引块,以此达到降低I/O的目的。他能极大地降低表扫描所消耗的I/O和CPU成本。


区映射

区映射是一个独立的访问结构,他会将数据块分到区中。Oracle将每个区映射实现为一种物化视图的类型。


无论何时在表中指定了CLUSTERING,数据库就会基于指定的聚簇列创建一个区映射。区映射会将列的最小值和最大值同属性聚簇表中连续的数据块进行对应。属性聚簇表使用区映射能降低I/O消耗。


你可以创建不使用区映射的属性聚簇表。你也能创建非属性聚簇表的区映射。例如,你可以基于一张行做了排序的表创建区映射,诸如股票交易表,其中的交易按照时间排序。可以执行DDL语句创建、删除和维护区映射。


可以参考:

Overview of Materialized Views”,物化视图概要。

《Oracle Database Data Warehousing Guide》了解更多区映射


区映射:比喻

关于区映射的一种松散的比喻,假设有个使用书柜的销售经理,将他比作数据块。书柜的每个格子都含有收据(行),描述了卖给客户的T恤衫,并且按照邮寄的日期排序。区映射就像一堆索引卡片。每张卡票对应到书柜格子的一个“区”(连续范围),例如格子1-10。对于每个区,卡片列出了存储在区中收据邮寄日期的最小值和最大值。


当某人想知道某个特定日期,邮寄了哪些T恤衫,经理就会快速翻阅卡片,直到他找到含有请求日期范围的卡片,记录下格子区,然后仅在这个区的格子中搜索请求的收据。通过这种方法,经理就能避免搜索每一个书柜格子中的收据。


区映射:示例

示例展示了区映射如何减少包含谓词常量的检索数据集。


假设创建如下的lineitem表

640?wx_fmt=png


lineitem表包含4个数据块,每个数据块含有2行的数据。下表展示了表中共计8行数据。

640?wx_fmt=png


可以使用CREATE MATERIALIZED ZONEMAP语句创建lineitem表的区映射。每个区会含有2个数据块,存储的是orderkey、shipdate和receiptdate列的最小值和最大值,如下所示,

640?wx_fmt=png

当你执行下面的查询,数据库能读取区映射,然后仅仅扫描块1和2,因为2014年1月3日的日期会落在对应的最小和最大日期之间,

640?wx_fmt=png


可以参考:

《Oracle Database Data Warehousing Guide》了解如何使用区映射。

《Oracle Database SQL Language Reference》了解CREATE MATERIALIZED ZONEMAP的语法和语义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值