Tôi có một bảng tmp_drop_ids
với một cột, id
và 3,3 triệu mục nhập. Tôi muốn lặp lại trên bảng, làm một cái gì đó với mỗi 200 mục. Tôi có mã này:postgresql: offset + giới hạn sẽ rất chậm
LIMIT = 200
for offset in xrange(0, drop_count+LIMIT, LIMIT):
print "Making tmp table with ids %s to %s/%s" % (offset, offset+LIMIT, drop_count)
query = """DROP TABLE IF EXISTS tmp_cur_drop_ids; CREATE TABLE tmp_cur_drop_ids AS
SELECT id FROM tmp_drop_ids ORDER BY id OFFSET %s LIMIT %s;""" % (offset, LIMIT)
cursor.execute(query)
Điều này chạy tốt, lúc đầu, (~ 0,15 giây để tạo bảng tmp), nhưng đôi khi sẽ chậm lại, ví dụ: khoảng 300k vé nó bắt đầu lấy 11-12 giây để tạo ra bảng tmp này, và một lần nữa khoảng 400k. Về cơ bản nó có vẻ không đáng tin cậy.
Tôi sẽ sử dụng các id đó trong các truy vấn khác vì vậy tôi đã tìm ra nơi tốt nhất để có chúng trong bảng tmp. Có cách nào tốt hơn để lặp qua các kết quả như thế này không?
Bạn đã lập chỉ mục tmp_drop_ids chưa? TẠO MẪU ĐỘC ĐÁO TỪ INDEX tmp_drop_ids_id_uidx TRÊN tmp_drop_ids (id); – filiprem
@filiprem: i do yes – Claudiu