Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 什么时候使用表簇?_Database_Performance_Oracle - Fatal编程技术网

Database 什么时候使用表簇?

Database 什么时候使用表簇?,database,performance,oracle,Database,Performance,Oracle,您如何确定何时使用?有两种类型,索引和散列,用于不同的情况。根据您的经验,表集群的引入和使用是否获得了回报 如果没有任何表是以这种方式设置的,那么修改它们以使用表集群将增加设置的复杂性。但是,在未来的维护工作中,预期的性能收益是否会超过复杂性增加的成本 您是否有最喜欢的在线参考资料或书籍能够很好地描述表集群并给出很好的实现示例 //非常感谢甲骨文提示 我自己没有使用过Oracle的表集群,但我知道它的索引表集群非常类似于MS SQL Server的聚集索引。也就是说,行数据由聚集索引的键进行物理

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

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

您是否有最喜欢的在线参考资料或书籍能够很好地描述表集群并给出很好的实现示例


//非常感谢甲骨文提示

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

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

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


因此,您不希望在可能值很少的列上使用它们(例如,M/F表示性别),因为这样一来,集群就不会给您带来任何好处,并且可能会为插入付出代价。您也永远不希望在“自动编号”代理键列(来自Oracle中的序列)上使用群集,因为这将在表的最后一个区段中创建一个“热点”,因为所有插入都必须在那里物理地发生。您也不希望对将要更新的列值应用群集,因为RDBMS必须实际移动记录以保持群集顺序。

表群集的致命功能是,您可以在同一物理位置存储不同表的相关行

这可以将联接性能提高一个数量级。然而,它并不像听起来的那么频繁

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

它或多或少是预联接的,但仍然感觉像普通的表(用于插入/选择/更新/删除)


另一方面,也有“单表集群”,主要用于控制“集群因素”——类似于聚集索引(在Oracle中称为索引组织表),但如果使用二级索引,则不会增加高成本。

关于集群,可以说很多,但是我发现关于Oracle集群的基本解释(优缺点、何时使用以及如何使用)可以在Tom Kyte的书中找到,您还可以搜索一些特定的集群使用示例(,等等)。如果你还没有看过这本书,你肯定应该看看

你也可以找到一些信息

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


希望这能有所帮助。

Oracle表群集与SQLServer的聚集索引不同。很抱歉稍后再问,但我没有发现另一个提示:MSSQL中是否有类似于Oracle表群集的内容?