你什么时候使用表簇?

7 database oracle performance

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

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

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

//非常感谢Oracle提示.

Mar*_*and 7

表簇的杀手级功能是您可以在同一物理位置存储不同表的相关行.

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

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

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

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


yuk*_*ude 1

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

这使得它非常适合访问频繁的列,该列具有相当少量的可能值(与总行数相比),其中大多数查询都希望检索具有特定值的所有行。由于所有此类行在物理上存储在一起,因此减少了磁盘 I/O,特别是寻道时间。

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

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