Nếu bạn phải chèn số lượng dữ liệu rất lớn tại sao bạn đang cố chèn tất cả chúng vào một insert
? (Điều này sẽ không cần thiết đặt tải trên bộ nhớ của bạn trong việc thực hiện lớn này insert
chuỗi và cũng trong khi thực hiện nó. Ngoài ra đây không phải là một giải pháp rất tốt nếu dữ liệu của bạn được chèn vào là rất rất lớn.)
Tại sao không bạn đặt một hàng cho mỗi lệnh insert
trong db và đặt tất cả các hàng bằng cách sử dụng một for...loop
và cam kết tất cả các thay đổi cuối cùng?
con = mysqldb.connect(
host="localhost",
user="user",
passwd="**",
db="db name"
)
cur = con.cursor()
for data in your_data_list:
cur.execute("data you want to insert: %s" %data)
con.commit()
con.close()
(Hãy tin tôi, đây thực sự là nhanh nhưng nếu bạn đang nhận được kết quả chậm hơn sau đó nó có nghĩa là bạn autocommit
phải True
.Đặt nó thành False
là msw
nói.)
Nguồn
2011-06-26 07:02:39
Bắt đầu với 1.2.0, MySQLdb vô hiệu hóa tự động theo mặc định, theo yêu cầu của tiêu chuẩn DB-API (PEP-249). source: http://mysql-python.sourceforge.net/FAQ.html – mikewaters
Nếu bạn cảm thấy rằng chèn của bạn vẫn còn chậm hơn họ nên, hãy chắc chắn cũng tinh chỉnh các thiết lập máy chủ mysql của bạn. Trong trường hợp của tôi, 'innodb_buffer_pool_size' của tôi quá nhỏ so với kích thước giao dịch của tôi và bằng cách tăng nó, tôi đã đạt được tăng tốc 40% cho chèn số lượng lớn. Xem: https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.html – jlh