oracle 对用于分区的字段进行索引是否冗余?

2fjabf4q  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(146)

我有几个很大的表需要分区。我从the "SQL and Database Explained!" series on partitioning那里了解到,我的最佳分区方法是通过区间分区:

...PARTITION BY RANGE(start_date) INTERVAL(NUMTOYMININTERVAL(1, 'YEAR')...

将使用start_date字段的过滤器查询正在分区的表:

SELECT columns
FROM My_Table
WHERE start_date BETWEEN SYSDATE-90 AND SYSDATE
ORDER BY start_date;

**对用于分区的字段进行索引是否冗余?**在我的例子中,由于我将对start_date进行分区,如果我也对start_date列进行索引,会有额外的好处吗?

bwitn5fc

bwitn5fc1#

问得好答案取决于您将查询的日期范围与分区间隔,以及您是使用Example数据库还是传统的Oracle数据库。
如果您没有Exhibition,您的分区是每年一次的,并且您要求几天,您仍然可以从日期列的本地索引中受益。这是因为扫描一整年的成本可能比执行索引扫描并按ROWID从索引中提取几天的数据要高。
但是,如果你(1)确实有Example,或者(2)你的分区是每月或更小的,你的查询是一天或更长时间,或者(3)你有每年的分区,你在查询中要求一个月或更长时间,那么不,你不需要也不想要日期列上的索引。在这些情况下使用索引的成本可能比扫描分区段的成本大得多。
我建议你按月分区,而不是按年分区。太多的查询可能会要求远远低于一年的价值,你不想扫描很多不必要的段块。您希望分区修剪尽可能多地进行修剪,因此较小的间隔将有助于此。只有当你的查询要求的天数少于一个月时,才能少于一个月。

相关问题