Tôi có một bảng có khoảng 5 triệu hàng có ràng buộc fk tham chiếu khóa chính của bảng khác (cũng xấp xỉ 5 triệu hàng).PostgreSQL - vô hiệu hóa các ràng buộc
Tôi cần xóa khoảng 75000 hàng từ cả hai bảng. Tôi biết rằng nếu tôi cố gắng làm điều này với ràng buộc fk cho phép nó sẽ mất một khoảng thời gian không thể chấp nhận được.
Xuất phát từ nền tảng Oracle ý tưởng đầu tiên của tôi là vô hiệu hóa ràng buộc, hãy xóa & sau đó bật lại ràng buộc. PostGres xuất hiện để cho phép tôi vô hiệu hóa các trình kích hoạt ràng buộc nếu tôi là người dùng siêu (tôi không, nhưng tôi đăng nhập với tư cách là người dùng sở hữu/tạo các đối tượng) nhưng điều đó dường như không hoàn toàn là những gì tôi muốn.
Tùy chọn khác là xóa ràng buộc và sau đó khôi phục nó. Tôi lo rằng việc xây dựng lại ràng buộc sẽ mất thời gian cho kích thước của các bảng của tôi.
Mọi suy nghĩ?
chỉnh sửa: sau khi khuyến khích của Billy, tôi đã thử thực hiện xóa mà không thay đổi bất kỳ ràng buộc nào và mất hơn 10 phút. Tuy nhiên, tôi đã phát hiện ra rằng bảng mà từ đó tôi đang cố gắng để xóa có một khóa tự tham chiếu nước ngoài ... trùng lặp (& không được lập chỉ mục).
Bản cập nhật cuối cùng - Tôi đã bỏ khóa tự tham chiếu ngoài, đã xóa và thêm nó vào. Billy phải tròn nhưng tiếc là tôi không thể chấp nhận nhận xét của anh ấy làm câu trả lời!
Nếu nó dùng lâu như vậy, thậm chí với 5 triệu hàng, sau đó bạn có một cái gì đó thiết lập sai. –
Cái gì? Xóa hoặc mở lại ràng buộc? Và có, nó là khá có thể một cái gì đó (s) được thiết lập sai hoặc theo một cách tối ưu hóa ít hơn - cơ sở dữ liệu đã khá nhiều được 'xây dựng' bởi hibernate (tôi không có gì để làm với điều đó). – azp74
Xóa. Kiểm tra FK từ các bảng được lập chỉ mục có thời gian tuyến tính và loại bỏ 75000 + 75000 hàng = 150 000 hàng. Xem xét một trường hợp xấu nhất 19 so sánh cho mỗi kiểm tra FK (tìm kiếm nhị phân, lg (5 triệu) == 19), và có lẽ 20 so sánh máy mỗi so sánh hàng, bằng 57 000 000 so sánh. Xem xét một ước tính bảo thủ của máy trung bình có thể làm một tỷ so sánh một giây, dễ dàng, điều này vẫn sẽ mất ít hơn một giây của thời gian CPU. Tải từ đĩa cũng không phải là một vấn đề lớn bởi vì ngay cả ở 5 triệu hàng bảng nên phù hợp với RAM. –