0

10 億件のレコードを持つテーブルに新しい列を追加したいと考えています。select ステートメントを高速化するには、この列と PK 列を含む新しいインデックスを追加する必要があります。

  1. 10 億件のレコード テーブルに新しいインデックスを追加するには、どれくらいの時間がかかりますか?
  2. [フィールド] などの新しい列、値は 0、1、2、9 になります。ほとんどのレコードは 9 になります。選択条件では、Field=0 または Field=1 または Field=2 が使用されますが、Field=9 は使用されません。

    たとえば、10 億レコードのテーブルでは、

    • 値が 0 のフィールドのレコード:100,000;
    • 値が 1 のフィールドのレコード:100,000;
    • 値を持つフィールド 2 レコード:100,000;
    • 値を持つフィールド 9 レコード: a billion-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 に答える