1. ホーム
  2. sql

[解決済み] インデックスを作成するのは、テーブルにデータを格納する前と、データが格納された後、どちらが良いですか?

2022-12-28 08:53:26

質問

約100M行のテーブルがあり、コピーしてインデックスを追加して変更しようと思っています。 新しいテーブルの作成にかかる時間はそれほど気にしていませんが、データを挿入する前にテーブルを変更する場合、または先にデータを挿入してからインデックスを追加する場合、作成したインデックスはより効率的でしょうか?

どのように解決するのですか?

データ挿入後にインデックスを作成するのが効率的です(バッチインポート前にインデックスを削除し、インポート後にインデックスを再作成することが推奨されることもあります)。

構文例(PostgreSQL 9.1、低速開発機、100万行)。

CREATE TABLE test1(id serial, x integer);
INSERT INTO test1(id, x) SELECT x.id, x.id*100 FROM generate_series(1,1000000) AS x(id);
-- Time: 7816.561 ms
CREATE INDEX test1_x ON test1 (x);
-- Time: 4183.614 ms

挿入とインデックスの作成 - 約12秒

CREATE TABLE test2(id serial, x integer);
CREATE INDEX test2_x ON test2 (x);
-- Time: 2.315 ms
INSERT INTO test2(id, x) SELECT x.id, x.id*100 FROM generate_series(1,1000000) AS x(id);
-- Time: 25399.460 ms

インデックスを作成してから挿入 - 約25.5秒 (2倍以上遅い)