【问题标题】:Explain why multiple SELECTs slows down PostgreSQL解释为什么多个 SELECT 会减慢 PostgreSQL
【发布时间】:2021-07-01 16:27:08
【问题描述】:

以下查询由 API 运行。单独运行几乎不需要任何时间,因为变量被有意限制为单个identifier 和一个小窗口。这是查询:

      SELECT
        raw_data->'foo'->0->>'time' as timestamp
      FROM dbo.raw_data
      WHERE raw_data->'foo'->0->>'number' = '${identifier}'
        AND raw_data->'foo'->0->>'time' > '${queryStartDateEpoch}'
        AND raw_data->'foo'->0->>'time' < '${queryEndDateEpoch}'
      ORDER BY raw_data->'foo'->0->>'time' DESC
      LIMIT 1

将为我的 API 提供的每个唯一系统编号运行一个查询。

我希望这个 API 可以同时运行 40 到 100 次这个查询。我看到的问题是前几个查询会立即运行,但在那之后性能下降,我最终要等待 20-30 分钟才能解决所有 40 多个查询。

谁能解释一下为什么 PostgreSQL 会这样变慢?谢谢。

我没有为 PostgreSQL 数据库设置 docker 服务器,并且对此的背景知识有限。我想您可以运行的查询数量是有限的,但我不清楚如何识别瓶颈。

【问题讨论】:

    标签: javascript json postgresql


    【解决方案1】:

    您很可能需要 WHERE 过滤器的索引,我希望您使用 JSONB 数据类型作为 raw_data,请查看文档:

    https://www.postgresql.org/docs/current/datatype-json.html#JSON-INDEXING

    并检查这个答案:

    https://stackoverflow.com/a/36076895/8308381

    【讨论】:

    • 数据库已被索引。查询运行很快。问题是当快速连续调用40个或更多时,每个的运行时间都会急剧增加。
    猜你喜欢
    • 2011-02-13
    • 2016-09-28
    • 2015-11-19
    • 2021-08-01
    • 2016-10-24
    • 2018-11-30
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多