表簇概述
表簇是一组在相同数据块中共享普通列并存储相关数据的表。当表被簇集后,一个数据块就能包含多张表的行。例如一个数据块能存储来自employees和departments表的行,而不会仅仅存储一张表的行。
簇键是簇表共有的一个或多个列。例如,employees和departments表共有department_id列。当创建表簇,或者向表簇中增加创建的表时,可以指定簇键。
簇键值是指定行集合的簇键列的值。包含相同簇键值的数据,例如department_id=20的记录,会物理层面存储在一起。每个簇键值只会在簇和簇索引中存储一次,无论多少张不同的表包含这个值。
打个比方,假设HR经理有两个文件箱,一个装的是employee雇员的文件夹,另一个装的是department部门的文件夹。用户通常会询问某个指定部门的所有雇员信息。为了方便检索,经理会重新将所有文件夹整理到一个文件箱中。她会按照department的ID来区分。因此,在部门ID=20的所有雇员的文件夹会和部门ID=20的部门文件夹放在一个文件箱中,在部门ID=100的所有雇员的文件夹会和部门ID=100的部门文件夹放在一个文件箱中,等等。
当数据主要用于检索(不是修改),或者表中数据被频繁检索或连接的时候,此时可以考虑使用簇表。因为表簇会在一个数据块中存储不同表中的相关行,相对于非簇表,他可能会提供以下优势:
簇表不适合于以下几种情况:
参考:
《Oracle Database Performance Tuning Guide》了解使用表簇的一些原则。