0

一般概述:我有一个包含大约 8000 万条记录的 Oracle 表“产品”,我想提高使用该表的连接的性能。在大多数情况下,我们对(表)“产品”中具有(列)“valid_until”日期(值)“mm/dd/9999”的记录的一小部分感兴趣。

可能的解决方案:

  • 分区'mm/dd/9999'并使用分区交换来快速加载新数据。
  • 在“valid_until”日期使用索引。

你们还有其他可能的 Oracle 解决方案或想法吗?

4

1 回答 1

1

基于需要找到 1% 的记录,我希望索引就足够了。如果查询只是为了找到当前产品的 PK,那么包含表的 PK 也可能是值得的。

如果不需要通过其他 valid_until 日期来识别记录,那么可能值得使用 Oracle 的等效部分索引,方法是对以下内容进行索引:

case value_until
when date '...whatever the date is...'
then valid_until
else null
end

...但这意味着更改架构或生成查询的工具或两者兼而有之。

您可能会密切关注表的统计信息,以确保所选行的基数受到合理准确的估计。

我不会将基于分区的解决方案作为首选,因为在更新 valid_until 值期间行迁移的开销会相当高,但如果索引无法提供查询性能,那么一定要尝试。

于 2015-05-11T14:25:31.343 回答