关于簇
• 簇是一个或多个表的组合,这些表的数据存储在相同的数据块中,当通过簇键查询这些表时,只需读一个数据块就能返回连接的多个表的数据;
• 有两种簇,索引簇和哈希簇;
• 符合下面的条件时适合使用簇:
Ø 表初始装载以后,很少或者没有DML发生;
Ø 针对每一条主表记录,从表中的记录数大致相同并且范围可知;
Ø 更多地是对簇中的表一起查询,较少单独查询(适于索引簇);
Ø 查询WHERE条件中使用针对簇键的相等匹配(适于哈希簇)。
• 先创建簇,建簇时系统分配簇段,再在表创建时将表指定到簇,建表时不能指定表空间,所需空间从簇段中分配;
• 建簇时需指定簇键,不管有多个表或者多少条记录,同一键值在簇中只存储一次;
• 建簇时指定SIZE关键值,这个值定义与一个簇键关联的记录占用的空间之和;
• 索引簇的关键字是INDEX(这是默认值),哈希簇的关键字是HASHKEYS(这个子句后跟一个整数指定簇的哈希值个数,哈希值是簇键值通过簇哈希函数计算后的返回值,哈希值相同的行会一起存储);
• 索引簇在建簇后必须再建簇键栏位的索引,这时系统再分配一个索引段(不明白为什么系统不把这两步联起来,而要这样多此一举?);哈希簇上不能建针对簇键的索引;
• 针对索引簇表的查询和普通表相似,可能也是先索引再簇;针对哈希簇表的查询,如果WHERE条件中用到键栏位的相等匹配,用与插入时相同的哈希算法处理这个键值可以得出查询数据的位置,只需一个IO即可取得需要的数据;
• 使用簇时必须小心规划和测试,否则反而会给性能带来负面影响。