我正在使用此代码更新Redshift上的几条记录(每次运行大约30.000条记录)。
cur = conn.cursor(cursor_factory=RealDictCursor)
sql_string_update = """UPDATE my_table SET "outlier_reason" = {0} WHERE "id" = {1};"""
for id, row in df_ignored.iterrows():
sql_ = sql_string_update.format(row['outlier_reason'],id)
cur.execute(sql_)
conn.commit()
每次运行大约30.000个元素最多需要2个小时的执行时间。
是否可以加快此查询的速度?
答案 0 :(得分:0)
您应该使用ETL做事的方式来思考而不是逐一讨论并进行更新,我认为这样做会更快。应在几分钟内处理30K记录。这是方法。
stg_my_table (id,outlier_reason)
。S3
或EC2
。copy
command与ID一起加载到stg_my_table中。my_table
与stg_my_table
结合在一起,对outlier_reason
进行更新,并设置id
。我认为上述解决方案必须将处理时间从2小时减少到几分钟。 请在编写实际代码之前手动尝试这种方式。我相信您会看到非常有希望的结果,然后一步一步地优化上述每个步骤,甚至可以获得更高的性能。