Oracle INT专栏,快速查找策略

Oracle INT column, strategy for fast searching

我的 table 有数百万条记录。有一个整数类型的列我需要检查某些条件。该值可以是 0..6 或 NULL。只有大约 1% 的记录在此列中具有非空、非零值。搜索“6”值可能需要 90 秒(!) column/field 上没有索引,所以我保证会进行 table 扫描。 我应该如何提高搜索性能?我应该确保在超出范围时将该列清空,还是应该确保该列不为空并更新为 0 ?基数如此低的整数字段可以从索引中受益吗?

听起来该列是索引的理想候选者。即使只有少数不同的值,因为 Oracle 索引只存储不为空的值(或者,在多列索引的情况下,所有列值都不为空)你会自动将搜索减少到 table.

的 1%

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

CREATE INDEX quirky_column_idx ON wide_table (case quirky_column when null then -1 else quirky_column end);

如果你想使用索引,你必须像索引中的函数一样重写你的查询,例如: select count(*) from wide_table where -1 = case quirky_column when null then -1 else quirky_column end ;

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