【问题标题】:How to RESOLVE PARTITION RANGE ALL in ORACLE如何在 ORACLE 中解决所有分区范围
【发布时间】:2022-02-17 15:55:30
【问题描述】:

我在下面有一个查询,它在执行计划中使用了 PARTITION RANGE ALL。但是该表已分区,并且我在“comar”列上有一个索引。

  1. 根本原因是什么?
  2. 如何优化它以获得 PARTITION RANGE ITERATOR?

查询:

select * from CFTDAT_TT D,  IHSPOS L  where L.COMAR=D.COMAR ;

索引:

CREATE  INDEX "OPS$BRU"."IHSPOS3" ON "OPS$BRU"."IHSPOS" ("COMAR") ;

这是执行计划的截图:

【问题讨论】:

  • 你想强制 PARTITION RANGE 像问题标题一样吗?从问题详细信息来看,您似乎想让它使用您的索引,这与分区无关。也许我错过了什么。
  • 1.除非您为分区列提供一些过滤器,否则不会出现分区范围迭代器。 2.索引不会在所有情况下都使用,它的使用取决于在索引扫描和表扫描的情况下IO优化器期望做多少。您的问题没有关于行数以及应该从大表中检索多少行的表大小的任何信息。这就是为什么我们无法猜测为什么优化决定使用这个执行计划
  • 感谢您格式化我的问题:)。关于索引我只想提供最大的信息来帮助我解决这个问题,表 IHSPOS 包含 2389 ROWS 和 CFTDAT_TT 它是临时表,它包含3行

标签: sql oracle optimization indexing partitioning


【解决方案1】:

索引通常对于在大表中查找少量行最有效,但在这种情况下,您需要 IHSPOS 的每一行。

您可以通过select /*+ index(l) */ 提示它使用您的索引,但看起来这需要读取更多数据并导致执行速度变慢。

【讨论】:

  • 感谢您的帮助。我添加了提示,但同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多