Trong postgresql, tôi thêm một chỉ mục vào một bảng lớn, và mất khoảng 1 giây (trong đó, thẳng thắn, làm tôi ngạc nhiên).Tại sao việc giảm chỉ mục mất nhiều thời gian hơn việc tạo chỉ mục?
Khi tôi đi đến thả chỉ mục, tôi để cho nó chạy trong> 200 giây mà không quay trở lại và cuối cùng đã hủy hoạt động thả.
CREATE INDEX idx_cservicelocationdivisionstatus_inversed
ON cservicelocationdivisionstatus (cservicelocationdivisionid, startdate, enddate DESC);
Mất rất ít thời gian, nhưng
DROP INDEX idx_cservicelocationdivisionstatus_inversed;
Đã quá lâu mà tôi đã từ bỏ và hủy bỏ.
Bảng cservicelocationdivisionstatus
có 6 cột và khoảng 310 nghìn hàng dữ liệu.
Tại sao việc xóa chỉ mục mất nhiều thời gian hơn việc tạo chỉ mục?
EDIT: This page cho biết rằng đối với mySql, một bảng có nhiều chỉ mục sẽ sao chép bảng và chèn lại tất cả các hàng mà không có chỉ mục bạn đang thả. (Tồi tệ hơn, với mySql, nếu bạn thả nhiều chỉ mục trên cùng một bảng, nó sẽ sao chép lại bảng một lần cho mỗi chỉ mục bạn đang xóa, thay vì thông minh và sao chép lại dữ liệu một lần mà không có tất cả các chỉ mục bạn rơi xuống.) Có phải điều gì đó như thế này xảy ra với postgres không?
Kiểm tra khóa trên chỉ mục/bảng: http://www.postgresql.org/docs/current/static/monitoring-locks.html Bạn không thể thả chỉ mục nếu nó được truy vấn sử dụng. –