Việc tạo chỉ mục có hiệu quả hơn sau khi tải dữ liệu đã hoàn thành hoặc trước hoặc không quan trọng?Cách hiệu quả nhất để tạo chỉ mục trong Postgres
Ví dụ: giả sử tôi có 500 tệp để tải vào DB Postgres 8.4. Dưới đây là hai kịch bản tạo chỉ mục mà tôi có thể sử dụng:
- Tạo chỉ mục khi bảng được tạo, sau đó tải từng tệp vào bảng; hoặc
- Tạo chỉ mục sau khi tất cả các tệp đã được tải vào bảng.
Bản thân dữ liệu bảng khoảng 45 Gigabyte. Chỉ số này khoảng 12 Gigabyte. Tôi đang sử dụng một chỉ số tiêu chuẩn. Nó được tạo ra như thế này:
CREATE INDEX idx_name ON table_name (column_name);
Tải dữ liệu của tôi sử dụng COPY FROM.
Sau khi tất cả các tệp được tải, không có cập nhật, xóa hoặc tải bổ sung nào sẽ xảy ra trên bảng (đó là giá trị dữ liệu của một ngày sẽ không thay đổi). Vì vậy, tôi muốn hỏi kịch bản nào sẽ hiệu quả nhất? Thử nghiệm ban đầu dường như chỉ ra rằng tải tất cả các tập tin và sau đó tạo chỉ mục (kịch bản 2) là nhanh hơn, nhưng tôi đã không thực hiện một so sánh khoa học của hai phương pháp tiếp cận.
Vâng, khi bảng bị khóa, không ai có thể đọc hoặc viết, điều này có thể rất khó chịu, ngay cả vào ban đêm. Bạn nên sử dụng CREATE INDEX CONCURRENTLY – mvp
@BradTilley: Tôi nghĩ đó là tính năng mới, nhưng PostgreSQL 8.4 [hỗ trợ nó] (http://www.postgresql.org/docs/8.4/static/sql-createindex.html). – mvp
"* khi bảng bị khóa không ai có thể đọc hoặc viết *" - Tôi không nghĩ đó là sự thật. Khi 'CREATE INDEX' đang chạy, bảng vẫn có thể được đọc, nhưng không được cập nhật nếu tôi không nhầm. –