Tôi đang chạy một thao tác lô trên tất cả các hàng trong cơ sở dữ liệu. Điều này liên quan đến việc chọn từng mô hình đơn lẻ và làm điều gì đó với nó. Nó làm cho tinh thần để chia này thành từng phần và làm nó chunk bởi chunk.Cách tốt nhất để xử lý cơ sở dữ liệu trong các khối với Django QuerySet?
Tôi hiện đang sử dụng Trình tạo trang, vì nó thuận tiện. Điều này có nghĩa là tôi cần đặt hàng trên các giá trị để chúng có thể được phân trang theo thứ tự. Điều này tạo ra các câu lệnh SQL có các mệnh đề order
và limit
và cho mỗi đoạn tôi nghĩ Postgres có thể sắp xếp toàn bộ bảng (mặc dù tôi không thể yêu cầu có bất kỳ kiến thức nào về nội bộ). Tất cả tôi biết là cơ sở dữ liệu là khoảng 50% CPU và tôi nghĩ rằng đó là quá cao chỉ để làm select
s.
Cách tốt nhất để lặp lại toàn bộ bảng theo cách RDMBS/CPU thân thiện là gì?
Giả sử rằng nội dung của cơ sở dữ liệu không thay đổi trong quá trình thực hiện hàng loạt.
này giả định rằng các hồ sơ được trả về theo thứ tự mà không có một 'khoản sort'. Điều này có đúng không? Ngoài ra, nếu tôi có một sắp xếp mặc định trong lớp 'Meta' của tôi, bằng cách nào đó tôi có thể loại bỏ nó cho truy vấn? – Joe
@Joe: Về cơ bản bạn nhận được các bản ghi giống nhau, nhưng không được phân loại. Nếu có khoảng trống trong không gian ID của bạn, số lượng bản ghi được trả về có thể ít hơn mong đợi cho mọi cuộc gọi. Trong khi với LIMIT/OFFSET bạn nhận được một số cố định của các hàng được sắp xếp (ngoại trừ cuộc gọi cuối cùng cho mỗi bảng). Tôi không làm thế nào để xử lý lớp 'Meta', nhưng bạn * cần * để sắp xếp các hàng của bạn cho LIMIT/OFFSET. –
Erwin, tôi thực sự xin lỗi tôi đã không đọc câu trả lời của bạn một cách chính xác. Bạn có chắc chắn điều này nhanh hơn không? mệnh đề 'between' chắc chắn chỉ hoạt động nếu một trong hai id đã được sắp xếp, hoặc nó thực hiện quét toàn bộ bảng mỗi lần? – Joe