首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Oracle Concept》第二章 - 15

表簇概述

表簇是一组在相同数据块中共享普通列并存储相关数据的表。当表被簇集后,一个数据块就能包含多张表的行。例如一个数据块能存储来自employees和departments表的行,而不会仅仅存储一张表的行。

簇键是簇表共有的一个或多个列。例如,employees和departments表共有department_id列。当创建表簇,或者向表簇中增加创建的表时,可以指定簇键。

簇键值是指定行集合的簇键列的值。包含相同簇键值的数据,例如department_id=20的记录,会物理层面存储在一起。每个簇键值只会在簇和簇索引中存储一次,无论多少张不同的表包含这个值。

打个比方,假设HR经理有两个文件箱,一个装的是employee雇员的文件夹,另一个装的是department部门的文件夹。用户通常会询问某个指定部门的所有雇员信息。为了方便检索,经理会重新将所有文件夹整理到一个文件箱中。她会按照department的ID来区分。因此,在部门ID=20的所有雇员的文件夹会和部门ID=20的部门文件夹放在一个文件箱中,在部门ID=100的所有雇员的文件夹会和部门ID=100的部门文件夹放在一个文件箱中,等等。

当数据主要用于检索(不是修改),或者表中数据被频繁检索或连接的时候,此时可以考虑使用簇表。因为表簇会在一个数据块中存储不同表中的相关行,相对于非簇表,他可能会提供以下优势:

  • 降低簇表连接的磁盘I/O。
  • 提高粗表连接的访问时间。
  • 需要更少的空间存储相关的表和索引数据,原因就是每行的簇键值不会重复存储。

簇表不适合于以下几种情况:

  • 表会频繁更新。
  • 表会经常需要全表扫描。
  • 表需要做truncate操作。

参考:

《Oracle Database Performance Tuning Guide》了解使用表簇的一些原则。

下一篇
举报
领券