我有两个表;一个是用户,另一个记录用户操作。我想计算每个用户的操作数并将其记录在users表中。大约有10万用户,以下代码需要6小时!一定有更好的办法!
def calculate_invites():
sql_db.execute("SELECT id, uid FROM users")
for row in sql_db:
id = row['id']
uid = row['uid']
sql1 = "SELECT COUNT(1) FROM actions WHERE uid = %s"
sql_db.execute(sql1, uid)
count_actions = sql_db.fetchone()["COUNT(1)"]
sql = "UPDATE users SET count_actions=%s WHERE uid=%s"
sql_db.execute(sql, (count_actions, uid))
最佳答案
您可以将这一切作为一个语句来完成:
update users
set count_actons = (select count(*) from actions a where a.uid = users.uid)
循环没有。没有多个查询。在SQL中做你能在SQL中做的事情。通常,在行上循环是您希望在数据库中而不是在应用程序中执行的操作。
关于python - 如何优化这种MySQL计数算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16627953/