【发布时间】:2010-01-08 19:08:42
【问题描述】:
我有一个包含供应商许可数据的大表(6m 条记录)。该表包含一个带有 Y/N 值的 NVARCHAR2(1) 列。我创建了一个视图来过滤掉值为“N”的记录,并且该视图将被广泛查询。索引 NVARCHAR2(1) 列的最佳方法是什么?
【问题讨论】:
我有一个包含供应商许可数据的大表(6m 条记录)。该表包含一个带有 Y/N 值的 NVARCHAR2(1) 列。我创建了一个视图来过滤掉值为“N”的记录,并且该视图将被广泛查询。索引 NVARCHAR2(1) 列的最佳方法是什么?
【问题讨论】:
什么是 Y/N 比? 记录是否已更新,因此它们从 Y/N 和/或 N/Y 开始? 如果是这样,这种情况是定期发生(例如,有库存/无库存/有库存/无库存)还是一次性(未加工/已加工)?
如果条目混杂在一起,并且您的比率是均匀的,那么索引不太可能有帮助。
您可以使用分区(如果您有许可证)从 N 中拆分 Y。物化视图或使表成为两个表上的 UNION ALL 视图(可能使用 INSTEAD OF 触发器)也可以从 N 中拆分 Y。所有这些都会导致更新处理受到惩罚。
如果列没有获得太多更新活动,位图索引可能是合适的。
您可以在 CASE WHEN 标志 = 'Y' 然后 'Y' 结束时拥有基于函数的索引。这将从索引中排除 N 个值,使其更小。
【讨论】:
如果表格的 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
【讨论】:
也许使用物化视图?然后您的所有查询都将在较小的“Y”表上运行。
【讨论】: