将新列和索引添加到具有十亿条记录的表中

时间:2013-05-09 16:09:23

标签: oracle indexing conditional-statements

我想将一个新列添加到包含十亿条记录的表中。为了加速select语句,我需要添加一个包含该列和PK列的新索引。

  1. 在十亿记录表中添加新索引需要多长时间?
  2. 新列例如[Field],该值为0,1,2,9。 大多数记录都是9.在选择条件下 将使用Field = 0或Field = 1或Field = 2,但不使用Field = 9。

    例如在十亿记录表中,

    • 值为0的字段记录:100,000;
    • 值为1的记录:100,000;
    • 具有值2记录的字段:100,000;
    • 值为9的记录:10亿-300,000
  3. 我应该在列上创建索引吗? 如果没有,则选择包含条件的sql Field = 0将太慢而无法返回结果?

1 个答案:

答案 0 :(得分:1)

如果大多数值是9,那么您可以避免将它们包含在索引中:

create index my_index on my_table (case column_name when 9 then null else column_name end);

然后查询......

select ...
from   ...
where  case column_name when 9 then null else column_name end = 2

......例如。

所花费的时间将是扫描整个表所需的时间,然后对将在索引中的300,000条记录进行排序。当然,使用并行索引构建更快。