【问题标题】:Adding new column and index to a table with a billion records向具有十亿条记录的表添加新列和索引
【发布时间】:2013-05-04 04:38:28
【问题描述】:

我想在一个有十亿条记录的表中添加一个新列。为了加快 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 条记录的字段:十亿-300,000
  3. 我应该在列上创建索引吗? 如果不是,则选择包含条件的sql Field=0 会不会太慢而无法返回结果?

【问题讨论】:

    标签: oracle indexing conditional-statements


    【解决方案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 条记录进行排序。当然,使用并行索引构建会更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多