【问题标题】:Is a globally partitioned index better (faster) than a non-partitioned index?全局分区索引是否比非分区索引更好(更快)?
【发布时间】:2010-11-24 09:58:27
【问题描述】:

我很想知道对通常是查询目标的数字列进行分区是否有性能优势。目前我有一个包含约 5000 万条记录的物化视图。当使用常规 b-tree 索引并按此数字列搜索时,我的成本为 7,查询结果大约需要 0.8 秒(使用非主缓存)。在为该列添加全局哈希分区(具有 64 个分区)后,我得到了 6 的成本,并且查询结果在大约 0.2 秒内(再次使用非主缓存)。

我的第一反应是分区索引提高了我的查询性能。但是,我意识到这可能只是一个巧合,可能完全取决于正在搜索的值,或者我不知道的其他值。所以我的问题是:将全局散列分区添加到大表上的数字列是否有性能优势,或者确定要扫描哪些索引分区的成本是否超过了仅在一个上进行全范围扫描的成本?非索引分区?

我确信这与许多 Oracle 问题一样,可以用“视情况而定”来回答。 :) 我有兴趣了解在确定每种方法的好处时应该考虑哪些因素。

谢谢!

【问题讨论】:

    标签: oracle indexing oracle10g performance partitioning


    【解决方案1】:

    我很确定您已在研究中找到此参考资料 - Partitioned Tables and Indexes。但是,如果有人感兴趣,我会给出一个链接,这是关于分区的非常好的材料。

    直截了当 - 分区索引只是将索引分解为多个部分(在您的情况下为 16 个),并根据其散列分区键分布数据。当您想使用它时,Oracle 会“计算”键的哈希值并确定在哪个部分继续搜索。

    了解索引搜索的工作原理,对于非常庞大的数据,我认为最好选择分区索引以减少您遍历的索引树(常规索引)。它实际上取决于表中的数据(常规索引树的组成方式),并且比常规树从起始节点遍历更快地散列和直接跳转到较低节点。

    最后,您必须对测试结果更有信心。如果一种技术在您的确切数据上比其他技术提供更好的结果,请不要担心实施它。

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多