Oracle INT专栏,快速搜索策略

时间:2015-01-27 11:05:45

标签: oracle search indexing integer

我有一张包含数百万条记录的宽表。对于某些条件,我需要检查整数类型的列。值可以是0..6或NULL。此列中只有大约1%的记录具有非null,非零值。正在搜索" 6"值可能需要90秒(!) 列/字段上没有索引,因此我保证了表扫描。 我该如何提高搜索性能?我是否应该确保在超出范围时使列为空,或者我应该确保该列不为空并更新为0?具有如此低基数的整数字段是否可以从索引中受益?

2 个答案:

答案 0 :(得分:2)

听起来这个列是索引的理想候选者。即使只有少数不同的值,因为Oracle索引只存储非空值(或者,对于多列上的索引,所有列值都不为空),您将自动将搜索量降低到表格的1%。

答案 1 :(得分:0)

如果要查询空值,请尝试使用基于函数的索引:

CREATE INDEX quirky_column_idx ON wide_table(case null quirky_column null,然后是-1 else quirky_column end);

如果要使用索引,则必须完全像索引中的函数一样重写查询,例如: 从wide_table中选择count(*),其中-1 = case quirky_column null,然后是-1 else quirky_column end;

现在,您甚至可以使用索引查询空值。知道数据严重偏差,除非在where子句中包含其他列,否则它可能不会产生太大的影响。