【问题标题】:Oracle Index columnsOracle 索引列
【发布时间】:2015-11-25 06:30:42
【问题描述】:

这是一个简短的示例。我意识到我无法为每个可能的场景创建索引,但如果我想让我们的数据仓库减少到每个表 3-4 个索引,这里有一个示例问题。

如果我有一个包含 Product、State、ZipCode、DatePurchased 和 50 个其他列的表。 * 如果用户有时想按产品查询, * 然后有时按产品和状态 * 然后有时按 DatePurchased * 然后有时仅按州进行

我需要为这4个场景做一个索引吗?或者我可以做一个索引并包含所有这 4 个列,Oracle 会看到我只要求 where 子句中的一两个字段?

尤其是产品和状态,我是否创建一个索引并包含这两列?如果 where 子句只有 Product 会命中该索引吗?或者如果我只想要状态,它会达到那个索引吗?还是我需要一个单独的索引,一个用于产品,一个用于状态,一个用于产品和状态组合?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    我可能会在以下列上创建索引:

    • (Product, State)
    • (状态)
    • (购买日期)

    关于最后一个;如果表很大或将要很大,我会在 DatePurchased 列上进行分区,这样,当您在 DatePurchased 上查询时,您可以获得分区修剪的好处,并且您可能不需要单独的索引。

    与所有内容一样,您应该使用表格和数据对其进行测试!

    【讨论】:

      【解决方案2】:

      我尽量保持简单并根据需要进行调整。由于您知道用户将按产品、状态和购买日期进行查询,因此请在这 3 列中的每一列上放置一个索引。它也应该有助于产品/状态案例。如果凭经验您发现产品/状态案例需要改进,请添加它。顺便说一句,额外的索引会减慢插入速度,但不会对查询产生负面影响。

      【讨论】:

        【解决方案3】:

        在以下列上创建索引:

        产品

        购买日期

        并在状态上进行分区。

        研究一些关于用户查询(或您自己的测试 SQL)的 EXPLAIN PLAN,以查看索引是否被正确使用。

        此外,请尝试使用位图索引与 B-Tree 索引,因为这些索引在数据仓库环境中很常见且有用。

        HTH

        【讨论】:

          猜你喜欢
          • 2020-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-05
          • 2019-01-08
          • 2010-11-16
          • 2010-11-21
          相关资源
          最近更新 更多