【发布时间】:2019-08-19 08:43:31
【问题描述】:
我有一个按时间键(月)分区的大约 25M 行的表。每个分区内大约有 200K 行。
我们在 BI 上下文中使用此表,这意味着业务用户在此表上查询时,除了过滤器值之外,这些查询始终相同。
大多数最终用户查询 24 个月的数据范围,这意味着需要 24 个分区来查找数据。我们觉得,如果我们在没有分区的情况下查询同一张表,查询速度远远快于分区表。所以我们相信,当查看太多(在本例中为 24 个)分区时,分区表并没有那么有趣。
是否有一些参数(alter session ...)或提示我们可以用来不让优化器使用分区但以另一种方式扫描表?
【问题讨论】:
-
您应该为过滤器中使用的列创建本地索引。每个分区都有目录中的记录。所以 oracle 正在通过目录中的键监视每个分区。同时压缩旧分区可以减少IO操作
-
尝试禁用分区并行扫描。
select/*+ NO_PARALLEL*/ * from或降低并行级别select/*+ PARALLEL 2 */ * from。 -
你有本地索引吗?如果是,则尝试使用 GLOBAL 索引。如果您使用本地索引查询 24 个分区,那么这意味着 Oracle 必须扫描 24 个不同的索引 - 这当然需要一些时间。
标签: sql oracle oracle12c database-partitioning