Oracle 向包含10亿条记录的表中添加新列和索引

Oracle 向包含10亿条记录的表中添加新列和索引,oracle,indexing,conditional-statements,Oracle,Indexing,Conditional Statements,我想在一个有10亿条记录的表中添加一个新列。为了加快select语句的速度,我需要添加一个新索引,该索引将包含此列和PK列 在十亿记录表中添加新索引需要多长时间 新列例如[Field],其值将为0,1,2,9。 大多数记录将是9。在选择条件下 将使用字段=0或字段=1或字段=2,但不会使用字段=9 例如在十亿记录表中 值为0的字段记录:100000 值为1的字段记录:100000 值为2的字段记录:100000 值为9的字段记录:十亿到三十万 我应该在列上创建索引吗? 如果不是,则选择包含条

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

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

    例如在十亿记录表中

    • 值为0的字段记录:100000
    • 值为1的字段记录:100000
    • 值为2的字段记录:100000
    • 值为9的字段记录:十亿到三十万
  • 我应该在列上创建索引吗? 如果不是,则选择包含条件的sql Field=0将太慢而无法返回结果


  • 如果大多数值为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
    
    。。。比如说

    所用的时间是扫描整个表,然后对索引中的300000条记录进行排序所需的时间。当然,并行索引构建速度更快