如何在Oracle中索引Y/N列

如何在Oracle中索引Y/N列,oracle,indexing,Oracle,Indexing,我有一个大表(6百万条记录),其中包含从供应商处获得许可的数据。该表包含一个具有Y/N值的NVARCHAR2(1)列。我已经创建了一个视图来过滤掉值为“N”的记录,该视图将被广泛查询。索引NVARCHAR2(1)列的最佳方法是什么?可能使用物化视图?然后,所有查询都将在较小的“仅Y”表上运行。是否可以使用物化视图?然后,所有查询都将在较小的“仅Y”表上操作。使用位图索引 使用位图索引 如果表格的Y/N值有很大的偏差,您可能还需要查看直方图: 如果表格的Y/N值有很大的偏差,您可能还需要查看直方

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

可能使用物化视图?然后,所有查询都将在较小的“仅Y”表上运行。

是否可以使用物化视图?然后,所有查询都将在较小的“仅Y”表上操作。

使用位图索引

使用位图索引


如果表格的Y/N值有很大的偏差,您可能还需要查看
直方图


如果表格的Y/N值有很大的偏差,您可能还需要查看
直方图

Y/N比是多少? 记录是否已更新,以便从Y/N和/或N/Y开始? 如果是这样,这种情况是否经常发生(如库存/缺货/库存/缺货)或一次性发生(未加工/加工)

如果条目混合在一起,并且你得到了一个均等的比率,那么索引不太可能有帮助

您可以使用分区(如果您有许可证的话)从N中分割Y。具体化视图或使表成为两个表上的UNION ALL视图(可能带有INSTEAD OF触发器)也可以从N中分割Y。所有这些都将招致更新处理的惩罚

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

当flag='Y'然后'Y'结束时,可以有一个基于CASE的函数索引。这将从索引中排除N个值,使其更小

Y/N比是多少? 记录是否已更新,以便从Y/N和/或N/Y开始? 如果是这样,这种情况是否经常发生(如库存/缺货/库存/缺货)或一次性发生(未加工/加工)

如果条目混合在一起,并且你得到了一个均等的比率,那么索引不太可能有帮助

您可以使用分区(如果您有许可证的话)从N中分割Y。具体化视图或使表成为两个表上的UNION ALL视图(可能带有INSTEAD OF触发器)也可以从N中分割Y。所有这些都将招致更新处理的惩罚

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


当flag='Y'然后'Y'结束时,可以有一个基于CASE的函数索引。这将从索引中排除N个值,使其更小

+1 Gary已经涵盖了大部分相关问题-此外,您的典型查询可能还涉及筛选更多选择性的列,这些列将指向您需要的索引。Y值和N值之间约占50/50。数据本身永远不会“更新”,但我们将批发替换数据集,因为供应商定期分发其最新资料。+1 Gary已涵盖了大部分相关问题-此外,您典型的查询可能还涉及筛选更多选择性的列,这些列将指向您需要的索引。Y值和N值之间的比例约为50/50。数据本身永远不会被“更新”,但我们将大量替换数据集,因为供应商会定期分发他们的最新资料。