【问题标题】:Oracle 12c - which index should be used for a table with partitions and sub-partitionsOracle 12c - 哪个索引应该用于具有分区和子分区的表
【发布时间】:2017-11-14 04:27:15
【问题描述】:

我在 Oracle 12c 中有一个 500M 记录的表。 表按 1 个 varchar 列进行分区,并按其他 varchar 列进行子分区。

在 Where 子句中使用这 2 列的查询应该使用哪些索引?

我假设本地分区索引是最佳选择,但想更深入地了解何时出现这种情况以及如何最好地创建它们?

【问题讨论】:

    标签: sql oracle indexing partition


    【解决方案1】:

    Oracle 能够partition pruning,这意味着如果您的查询在 where 子句中有分区键列,Oracle 足够聪明,只查询那些相关的分区。在这种情况下,local partitioned index 更有利,因为它是“分区本地的”,即索引也以相同的方式分区,Oracle 只会读取相关分区的相关索引条目。

    但是,如果您的查询在 where 子句中没有分区键列,则 Oracle 无法应用分区修剪并且别无选择,只能扫描所有 local partitioned indexes,或者,最坏的情况,整个表的数据。这就是全局分区索引将在 where 子句中的那些列上派上用场的地方。在这种情况下,Oracle 会在跨分区的这些列上创建一个索引,并且确切地知道要从哪些分区中读取哪些记录符合语句的 where 子句。

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2019-05-11
      • 2016-11-07
      • 2013-06-02
      • 2018-03-24
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      相关资源
      最近更新 更多