我有两个表;一个是用户,另一个记录用户操作。我想计算每个用户的操作数并将其记录在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/

10-14 12:31