0

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

4

1 回答 1

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

于 2013-05-09T17:24:15.563 回答