PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

По-добре ли е да създадете индекс, преди да попълните таблица с данни, или след като данните са на мястото си?

Създаването на индекс след вмъкване на данни е по-ефективен начин (дори често се препоръчва да махнете индекс преди пакетно импортиране и след импорта да го създадете отново).

Синтетичен пример (PostgreSQL 9.1, машина за бавна разработка, един милион реда):

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 секунди (повече от два пъти по-бавно)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL поддържа ли прозрачно компресиране на таблици (фрагменти)?

  2. Защо postgres не създава базата данни?

  3. Печат на екран в .sql файл postgres

  4. Комбинирайте вложени заявки на цикъл към резултат от родителски масив - pg-promise

  5. Как search_path влияе върху разделителната способност на идентификатора и текущата схема