gpt4 book ai didi

optimization - 使用 JOIN(大表性能)Postgresql 进行更新?

转载 作者:行者123 更新时间:2023-11-29 11:30:59 24 4
gpt4 key购买 nike

我正在尝试以合理的性能执行以下查询:

UPDATE order_item_imprint SET item_new_id = oi.item_new_id
FROM order_item oi
INNER JOIN order_item_imprint oii ON oi.item_number = oii.item_id

目前,它无法在 8 天内完成,因此我们将其终止。查询说明如下:

Query Graphical Explaination

Merge Join  (cost=59038021.60..33137238641.84 rows=1432184234121 width=1392)
Merge Cond: ((oi.item_number)::text = (oii.item_id)::text)
-> Nested Loop (cost=0.00..10995925524.15 rows=309949417305 width=1398)
-> Index Scan using unique_order_item_item_number on order_item oi (cost=0.00..608773.05 rows=258995 width=14)
-> Seq Scan on order_item_imprint (cost=0.00..30486.39 rows=1196739 width=1384)
-> Materialize (cost=184026.24..198985.48 rows=1196739 width=6)
-> Sort (cost=184026.24..187018.09 rows=1196739 width=6)
Sort Key: oii.item_id
-> Seq Scan on order_item_imprint oii (cost=0.00..30486.39 rows=1196739 width=6)

我在两个表上都有索引,并且我确保比较字段的类型和大小相同。我现在正试图更改 postgresql 服务器配置以希望有所帮助,但我不确定它是否会。

order_item_imprint 表的大小约为 110 万,磁盘占用空间为 145MB,而 order_item 表的大小约为其三分之一。

主要目标是我需要能够在几个小时的维护时段内将它与其他几个查询一起运行。

自动清理和分析已在执行计划之前运行。

最佳答案

I found an alternate way to write the query that allowed the pgsql optimizer to build the query much more efficiently

实际上,您所做的是删除 order_item_inprint 上的无约束自连接。

如果您查看第一行,您将看到以下行估计值:

rows=1432184234121

这是它尝试进行的 14 亿次更新。当您在连接中为 order_item_inprint 添加别名时,它被视为与更新目标不同的表。

关于optimization - 使用 JOIN(大表性能)Postgresql 进行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com