sql >> データベース >  >> RDS >> PostgreSQL

テーブルにデータを入力する前、またはデータを配置した後にインデックスを作成する方がよいでしょうか。

    データ挿入後にインデックスを作成する方が効率的です(バッチインポートの前とインポート後にインデックスを再作成することをお勧めします)。

    Synteticの例(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倍以上遅い)



    1. エラー1045(28000):ユーザー'root' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    2. MySQLがいくつかの外部キーを削除する

    3. MySQLTunnerツールを使用してMySQL/MariaDBのパフォーマンスを最適化する

    4. エラー1067(42000):「created_at」のデフォルト値が無効です