你什么时候使用表簇?

时间:2008-08-26 13:23:38

标签: database performance oracle

如何确定何时使用table clusters?有两种类型,索引和哈希,用于不同的情况。根据您的经验,表格集群的介绍和使用是否得到了回报?

如果没有以这种方式设置表,修改它们以使用表簇会增加设置的复杂性。但是,预期的性能优势是否会增加未来维护工作中增加复杂性的成本?

您是否有任何最喜欢的在线参考书或书籍能够很好地描述表格聚类并提供良好的实施示例?

// Oracle提示非常感谢。

3 个答案:

答案 0 :(得分:7)

表群集的一个杀手级功能是,您可以将不同表格的相关行存储在同一物理位置。

这可以将连接性能提高一个数量级。然而,它听起来并不经常付出代价。

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

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

另一方面,有“单表集群”主要用于控制“集群因素” - 类似于集群索引(在Oracle中称为Index-Organized-Table)但不添加高成本的想法使用二级索引。

答案 1 :(得分:2)

人们可以谈论群集,但我发现几乎可以在Tom Kyte的书中找到关于Oracle群集的最终解释(利弊,何时使用以及如何使用) - { {3}},您也可以在Effective Oracle by Design搜索某些特定的群集使用示例(asktom1等)。如果你还没有,你一定要看看这本书。

您也可以找到一些信息2

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

希望这有帮助。

答案 2 :(得分:1)

我自己没有使用过Oracle的表集群,但据我所知,它的索引表集群与MS SQL Server的集群索引非常相似。也就是说,行数据是通过聚集索引的键进行物理组织的。

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

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

因此,您不希望在具有较少可能值的列(例如,性别的M / F)上使用它们,因为群集不会为您带来任何费用,并且可能会导致插入成本。您也不希望在“自动编号”代理键列(来自Oracle中的序列)上使用群集,因为这将在表的最后一个范围中创建“热点”,因为所有插入必须在那里实际发生。您还不希望将群集应用于将更新的列值,因为RDBMS必须物理移动记录以维持群集顺序。