我有兴趣了解对通常作为查询目标的数字列进行分区是否有性能优势。目前我有一个包含约 5000 万条记录的物化视图。当使用常规 B 树索引并按此数字列搜索时,我得到的成本为 7,查询结果大约需要 0.8 秒(使用非预置缓存)。为该列添加全局哈希分区(具有 64 个分区)后,我得到的成本为 6,查询结果大约需要 0.2 秒(同样使用非预置缓存)。
我的第一反应是分区索引提高了我的查询性能。然而,我意识到这可能只是一个巧合,并且可能完全取决于正在搜索的值或我不知道的其他值。所以我的问题是:将全局散列分区添加到大型表上的数字列是否有性能优势,或者确定要扫描哪些索引分区的成本是否超过了仅在一个表上进行全范围扫描的成本非索引分区?
我确信这个问题,就像许多 Oracle 问题一样,可以用“视情况而定”来回答。 :) 我有兴趣了解应该考虑哪些因素来确定每种方法的优点。
Thanks!
我很确定您在研究中找到了这个参考资料 -分区表和索引 http://stanford.edu/dept/itss/docs/oracle/10g/server.101/b10743/partconc.htm。不过,如果有人感兴趣,我会提供一个链接,这是关于分区的非常好的材料。
开门见山 - 分区索引只是将索引分解为多个片段(在您的情况下为 16 个片段),并根据其散列分区键传播数据。当您想要使用它时,Oracle 会“计算”键的哈希值并确定在哪个部分继续搜索。
了解索引搜索的工作原理,对于非常大的数据,我认为最好选择分区索引,以减少您遍历的索引树(常规索引)。它实际上取决于表中的数据(常规索引树是如何组成的)并且是散列并直接跳转到较低节点比从起始节点遍历常规树更快。
最后,您必须对测试结果更有信心。如果一种技术在您的精确数据上比其他技术能提供更好的结果,请不要担心实施它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)