MySQL循环分批提交是一种优化数据库操作的技术,特别是在处理大量数据时。它通过将大量的插入、更新或删除操作分成多个小批次来执行,从而减少对数据库的负担,提高性能并避免长时间锁定表。
以下是一个使用Python和MySQL Connector库进行分批提交的示例:
import mysql.connector
# 连接到MySQL数据库
db = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
cursor = db.cursor()
# 假设我们有一个包含大量数据的列表
data_to_insert = [
(1, "Alice"),
(2, "Bob"),
(3, "Charlie"),
# ... 更多数据
]
batch_size = 1000
for i in range(0, len(data_to_insert), batch_size):
batch = data_to_insert[i:i + batch_size]
sql = "INSERT INTO users (id, name) VALUES (%s, %s)"
cursor.executemany(sql, batch)
db.commit()
print(f"Committed batch {i // batch_size + 1}")
cursor.close()
db.close()
原因:长时间运行的事务可能会导致数据库事务超时。
解决方法:
SET GLOBAL innodb_lock_wait_timeout = 120; -- 设置全局事务超时时间为120秒
原因:多个并发事务可能会竞争同一资源的锁。
解决方法:
ALTER TABLE users ADD INDEX idx_name (name); -- 添加索引以减少锁竞争
通过以上方法,可以有效解决分批提交过程中遇到的一些常见问题。
领取专属 10元无门槛券
手把手带您无忧上云