2009-08-31 108 views
8

我很想知道是否有性能上的好处,即对通常是查询目标的数字列进行分区。目前我有一个包含5000万条记录的物化视图。当使用常规b-tree索引并通过这个数字列进行搜索时,我花费了大约7秒的时间和大约0.8秒的时间查询结果(使用非引导缓存)。在为该列添加全局散列分区(包含64个分区)之后,我的成本为6,查询结果约为0.2秒(再次使用非引导缓存)。全局分区索引是否比非分区索引更好(更快)?

我的第一反应是分区索引提高了我的查询性能。但是,我意识到这可能只是一个巧合,可能完全依赖于正在搜索的值或其他我不知道的值。所以我的问题是:将全局哈希分区添加到大型数据表中的数值列是否会带来性能优势,或者是确定要扫描哪些索引分区的成本 - 只需在全局范围内扫描非索引分区?

我敢肯定,像许多Oracle问题一样,可以用“依赖”来回答。 :)我有兴趣了解我应该考虑哪些因素来确定每种方法的优点。

谢谢!

回答

4

我很确定你在你的研究中发现了这个参考文献 - Partitioned Tables and Indexes。不过,如果有人感兴趣,我会给出一个链接,这是关于分区的一个非常好的材料。

直接点 - 分区索引只是将索引分解成块(在您的情况下为16),并根据散列分区键传播数据。当你想使用它时,Oracle会“计算”密钥的哈希值并确定在哪个部分继续搜索。

了解索引搜索是如何工作的,对于真正巨大的数据我认为最好选择分区索引以减少您遍历的索引树(常规索引)。它实际上取决于表中的数据(构造常规索引树的方式),并且比起始节点的常规树遍历更快地哈希和直接跳转到较低节点。

最后,您必须对测试结果更有信心。如果有一种技术比其他技术更精确地获得更好的结果,不用担心实施。