【问题标题】:How to index Y/N column in Oracle如何在 Oracle 中索引 Y/N 列
【发布时间】:2010-01-08 19:08:42
【问题描述】:

我有一个包含供应商许可数据的大表(6m 条记录)。该表包含一个带有 Y/N 值的 NVARCHAR2(1) 列。我创建了一个视图来过滤掉值为“N”的记录,并且该视图将被广泛查询。索引 NVARCHAR2(1) 列的最佳方法是什么?

【问题讨论】:

    标签: oracle indexing


    【解决方案1】:

    什么是 Y/N 比? 记录是否已更新,因此它们从 Y/N 和/或 N/Y 开始? 如果是这样,这种情况是定期发生(例如,有库存/无库存/有库存/无库存)还是一次性(未加工/已加工)?

    如果条目混杂在一起,并且您的比率是均匀的,那么索引不太可能有帮助。

    您可以使用分区(如果您有许可证)从 N 中拆分 Y。物化视图或使表成为两个表上的 UNION ALL 视图(可能使用 INSTEAD OF 触发器)也可以从 N 中拆分 Y。所有这些都会导致更新处理受到惩罚。

    如果列没有获得太多更新活动,位图索引可能是合适的。

    您可以在 CASE WHEN 标志 = 'Y' 然后 'Y' 结束时拥有基于函数的索引。这将从索引中排除 N 个值,使其更小。

    【讨论】:

    • +1 Gary 已经涵盖了大部分相关问题 - 此外,您的典型查询可能还涉及对更具选择性的列进行过滤,这些列将指向您需要的索引。
    • Y 和 N 值之间的比例约为 50/50。数据本身永远不会“更新”,但我们将替换数据集,因为供应商会定期分发他们的最新资料。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果表格的 Y/N 值存在较大偏差,您可能还需要查看 Histograms

      http://www.dba-oracle.com/t_histograms.htm

      http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/stats.htm#i42219

      【讨论】:

        【解决方案4】:

        也许使用物化视图?然后您的所有查询都将在较小的“Y”表上运行。

        【讨论】:

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