Python postgresql更新功能花费的时间太长
我有一张桌子叫Python postgresql更新功能花费的时间太长,python,postgresql,flask,sqlalchemy,flask-sqlalchemy,Python,Postgresql,Flask,Sqlalchemy,Flask Sqlalchemy,我有一张桌子叫 产品 其中包含列 id,数据 这里的数据是一个JSONB。 id是唯一的id 我尝试批量添加10k产品,这花费了我将近4分钟的时间。 使用较低的产品更新效果很好,但是对于大量的产品来说,这需要很多时间,我如何优化它? 我正在尝试批量更新200k+产品,现在需要5分钟以上的时间 updated_product_ids = [] for product in products: new_product = model.Product(id, data=product['dat
产品
其中包含列
id
,数据
这里的数据是一个JSONB。
id是唯一的id
我尝试批量添加10k产品,这花费了我将近4分钟的时间。
使用较低的产品更新效果很好,但是对于大量的产品来说,这需要很多时间,我如何优化它?
我正在尝试批量更新200k+产品,现在需要5分钟以上的时间
updated_product_ids = []
for product in products:
new_product = model.Product(id, data=product['data'])
new_product['data'] = 'updated data'
new_product['id'] = product.get('id')
updated_product_ids.append(new_product)
def bulk_update(product_ids_arr):
def update_query(count):
return f"""
UPDATE pricing.products
SET data = :{count}
WHERE id = :{count + 1}
"""
queries = []
params = {}
count = 1
for sku in product_ids_arr:
queries.append(update_query(count))
params[str(count)] = json.dumps(sku.data)
params[str(count + 1)] = sku.id
count += 2
session.execute(';'.join(queries), params) #This is what takes so long..
bulk_update(updated_product_ids)
我原以为使用原始sql执行此操作会更快,但这需要花费很多时间
我正在尝试更新大约8k产品,这几乎需要3分钟或更长时间。突出的事情是:
批量更新在定义之前执行,更新查询
从未执行过,如果不使用它,你不需要关心执行人
的模式。@KlausD。谢谢你指出这些。我更新了线程。为每个查询创建一个字符串是一项相当艰巨的工作,使用SQLAlchemy的核心或批量插入工具可能可以避免。不过,我也建议对更新进行批处理,并提交每个批。如果您在每1000次更新之后提交,那么数据库可以分配更少的资源,这应该会提高性能。您可以尝试找到每批记录的最佳数量。相关:什么是sku
?它在任何地方都没有定义。