oracle - 全局分区索引是否比非分区索引更好(更快)?

标签 oracle indexing oracle10g performance partitioning

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

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

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

谢谢!

最佳答案

我很确定你已经在你的研究中找到了这个引用 - Partitioned Tables and Indexes .但是,如果有人感兴趣,我会提供一个链接,这是关于分区的非常好的 Material 。
直截了当 - 分区索引只是将索引分解为多个部分(在您的情况下为 16 个)并根据散列分区键分布数据。当您想使用它时,Oracle 会“计算”键的散列值并确定在哪个部分继续搜索。
知道索引搜索是如何工作的,对于非常大的数据,我认为最好选择分区索引以减少您遍历的索引树(常规索引)。它实际上取决于表中的数据(常规索引树是如何组成的),并且比常规树从起始节点遍历更快地进行散列和直接跳转到较低节点。
最后,您必须对测试结果更有信心。如果一种技术在您的确切数据上提供比其他技术更好的结果,请不要担心实现它。

关于oracle - 全局分区索引是否比非分区索引更好(更快)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358490/

相关文章:

python - SQLAlchemy 中是否有等效的 LISTAGG WITHIN GROUP?

oracle - 有人可以解释一下mysql和Oracle之间的数据库概念区别吗?

algorithm - 填字游戏搜索的最佳数据结构

oracle10g - 如何仅更新 oracle 中日期时间字段中的 "hour"部分?

Oracle - 将日期值转换为 TO_CHAR()

sql - 连接到没有范围但需要范围的表

oracle - 如何测试日期格式字符串是否是 Oracle 中的有效日期格式字符串

sql - Oracle SQL : selecting date field without day (Only Month and Year)

python-3.x - 使用 Openpyxl 从标题或实例获取工作表索引

performance - Maria DB INDEX 选择 - 为什么 maria 选择次优索引?