カラム追加ってどれぐらい時間かかるの(PostgreSQL)

はじめに

カラム追加にどれくらい時間がかかるものなのかやってみました。

環境

  • CentOS6.5(32bit)
  • PostgreSQL9.3.4

手順

検証用のテーブルを作ります。

CREATE TABLE hoge
(

  id serial NOT NULL,

  name character varying(128),

  CONSTRAINT pkey_hoge PRIMARY KEY (id)

);

1万行INSERTした後にカラム追加してみます。

test=# select current_time;
       timetz
--------------------
 04:16:42.544809+09
(1 行)

test=# alter table hoge add address varchar(256);
ALTER TABLE
test=# select current_time;
       timetz
--------------------
 04:16:42.562536+09
(1 行)

0秒02ぐらいかかりました。

NOT NULL制約をつけてカラム追加してみます。

test=# select current_time;
      timetz
-------------------
 04:20:00.64587+09
(1 行)

test=# alter table hoge add fuga varchar(256) not null default 'fffff';
select current_time;
ALTER TABLE
test=# select current_time;
      timetz
-------------------
 04:20:00.88685+09
(1 行)

0秒22ぐらいかかりました。
10万レコードINSERTしてNOT NULL制約をつけてカラム追加してみます。

test=# select current_time;
       timetz
--------------------
 04:25:00.268852+09
(1 行)

test=# alter table hoge add fugafuga varchar(256) not null default 'fffff';
select current_time;
ALTER TABLE
test=# select current_time;
       timetz
--------------------
 04:25:02.316623+09
(1 行)

2秒04かかりました。まあ許容範囲でしょうか。
つづいて100万レコードINSERTしてNOT NULL制約をつけてカラム追加してみます。

test=# select current_time;
       timetz
--------------------
 04:33:00.993666+09
(1 行)

test=# alter table hoge add fugafugafugafuga varchar(256) not null default 'fffff';
select current_time;
ALTER TABLE
test=# select current_time;
       timetz
--------------------
 04:33:06.558743+09
(1 行)

5秒56かかりました。場合によっては気にしなければならないでしょうか。

まとめ

制約のついたカラム追加はそれなりに時間がかかる。

データベース徹底攻略 (WEB+DB PRESS plus)

データベース徹底攻略 (WEB+DB PRESS plus)