怎样才能优化这个MySQL计数算法?

Dav*_*ley 1 python mysql sql count mysql-python

我有2张桌子; 一个是用户,另一个是用户操作.我想计算每个用户的操作数,并将其记录在users表中.有~100k用户,以下代码需要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))
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

您可以将此作为一个声明:

update users
    set count_actons = (select count(*) from actions a where a.uid = users.uid)
Run Code Online (Sandbox Code Playgroud)

不用于循环.没有多个查询.在SQL中用SQL做什么.通常,循环遍历行是您希望在数据库中而不是在应用程序中执行的操作.