7

您如何确定何时使用表集群?有两种类型,索引和散列,用于不同的情况。根据您的经验,表集群的引入和使用是否得到了回报?

如果您的所有表都不是以这种方式设置的,那么修改它们以使用表集群会增加设置的复杂性。但是,预期的性能收益是否会超过未来维护工作增加复杂性的成本?

您是否有任何最喜欢的在线参考资料或书籍,它们很好地描述了表集群并给出了很好的实现示例?

//Oracle 提示非常感谢。

4

3 回答 3

8

表簇的杀手级特性是可以将不同表的相关行存储在同一物理位置。

这可以将连接性能提高一个数量级。然而,它并没有听起来那么频繁。

我唯一一次使用它是一个三表连接,由两个散列连接执行。花了太长时间;)。但是,连接在同一列上,因此可以使用由连接列作为键的哈希表集群。这导致所有相关的行都被存储在一起(理想情况下,在同一个数据库块中)。知道了这一点,Oracle 可以通过特殊优化(“集群连接”)执行连接。

它或多或少是预先加入的,但仍然感觉像普通表(对于 INSERT/SELECT/UPDATE/DELETE)。

另一方面,有“单表集群”,主要用于控制“集群因素”——类似于集群索引(在 Oracle 中称为 Index-Organized-Table),但如果使用辅助索引不会增加高成本指数。

于 2011-06-22T05:05:45.367 回答
3

关于集群可以说很多,但我发现关于 Oracle 集群的几乎终极解释(优缺点、何时使用以及如何使用)可以在 Tom Kyte 的书 - Effective Oracle by Design中找到,您也可以搜索asktom一些特定的集群使用示例(1、2。如果你还没有,你绝对应该看看这本书。

您还可以在此处找到一些信息。

但是在创建复杂的模式结构之前,您应该始终做的事情是尝试、测试、基准测试并选择最适合您需求的一种解决方案:)

希望这可以帮助。

于 2011-06-22T08:30:35.253 回答
1

我自己没有用过Oracle的表簇,但是我知道它的索引表簇很像MS SQL Server的簇索引。也就是说,行数据是由聚集索引的键物理组织的。

这对于具有相当少量可能值(与总行数相比)的频繁访问的列来说是理想的,其中大多数查询都希望检索具有特定值的所有行。因为所有这些行都物理存储在一起,磁盘 I/O,尤其是寻道时间,减少了。

“相当小”并不容易定义,但如果您经常查询单个代码区域中的所有地址,地址表中的邮政编码或邮政编码似乎是合理的。对于全国范围的地址表来说,省/州/地区代码可能太小了。

因此,您不想在可能值很少的列上使用它们(例如,M/F 表示性别),因为这样集群不会给您带来任何好处,并且可能会花费您的插入费用。您也永远不想在“自动编号”代理键列(来自 Oracle 中的序列)上使用集群,因为这将在表的最后一个范围中创建一个“热点”,因为所有插入都必须在物理上发生。您也不希望将集群应用于将要更新的列值,因为 RDBMS 必须物理移动记录以维护集群排序。

于 2008-08-27T01:27:23.910 回答