我有以下python脚本,它逐行从文件读取并执行mysql更新查询。它非常慢,每个查询似乎需要1秒钟。知道为什么这么慢吗?
with open(fname) as f:
for line in f:
line = line.rstrip()
email, name = line.split(':')[0], line.split(':')[-1]
try:
cursor.execute("UPDATE user SET name=%s WHERE email=%s", (name, email))
except mariadb.Error as error:
print("Error: {}".format(error))
答案 0 :(得分:4)
您应该能够使用索引修复性能问题:
create index idx_user_email on user(email);
1秒的更新时间很长。
答案 1 :(得分:0)
您可以尝试使用多个帖子。
import threading
with open(fname) as f:
for line in f:
line = line.rstrip()
email, name = line.split(':')[0], line.split(':')[-1]
thread = threading.Thread(target=updateUser, args=[name, email] )
thread.start()
def updateUser(name, email):
try:
cursor.execute("UPDATE user SET name=%s WHERE email=%s", (name, email))
except mariadb.Error as error:
print("Error: {}".format(error))
在查询数据库时,可以避免浪费时间。因此,当数据库正在处理查询时,您的程序将准备另一个查询。
答案 2 :(得分:0)
如果你想狂热,你也可以关闭日记:
db= sqlite3.connect('database.db')
cursor = db.cursor()
cursor.execute("PRAGMA synchronous = OFF")
cursor.execute("PRAGMA journal_mode = OFF")