Is it better to create an index before filling a table with data, or after the data is in place?

后端 未结 5 1506
遥遥无期
遥遥无期 2020-12-07 19:37

I have a table of about 100M rows that I am going to copy to alter, adding an index. I\'m not so concerned with the time it takes to create the new table, but will the crea

5条回答
  •  一向
    一向 (楼主)
    2020-12-07 20:11

    Creating index after data insert is more efficient way (it even often recomended to drop index before batch import and after import recreate it).

    Syntetic example (PostgreSQL 9.1, slow development machine, one million rows):

    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
    

    Insert and then create index - about 12 sec

    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
    

    Create index and then insert - about 25.5 sec (more than two times slower)

提交回复
热议问题