【问题标题】:PostgreSQL update takes too longPostgreSQL 更新耗时过长
【发布时间】:2022-01-19 05:19:20
【问题描述】:

我在 ny select 查询上有一个限制为 1000 的查询更新:

UPDATE id SET satus = 201 WHERE uniquecode in (ids..)

我已经有我的查询的索引,但花了很长时间

CREATE UNIQUE INDEX id_idx ON public.id USING btree (id);


  ->  Index Scan using id_idx on id (cost=0.56..4280.29 rows=500 width=811) (actual time=0.758..11.244 rows=500 loops=1)
Index Cond: ((id)::numeric = ANY (ids..)
Planning Time: 3.087 ms
Execution Time: 1543.567 ms

我需要在 1000 毫秒以下执行

【问题讨论】:

    标签: postgresql indexing


    【解决方案1】:

    在我看来,您想要的索引位于 uniquecode 列上,而不是 id 列上:

    CREATE UNIQUE INDEX uq_idx ON public.id USING btree (uniquecode);
    

    请注意,如果id 是您的表的主键,那么它应该已经有一个 btree 索引。

    【讨论】:

    • 抱歉,我的查询有误。但是,我会试试的。谢谢
    【解决方案2】:

    你没有展示完整的执行计划,也没有展示实际的查询,但是如果你展示的信息碎片是准确的,那么时间不是花在索引扫描上,而是花在更新本身上。

    表上可能有很多索引和/或长时间运行的触发器。

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2012-11-04
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多