【问题标题】:PostgreSQL Index on JSON on Large Data Sets大数据集上 JSON 的 PostgreSQL 索引
【发布时间】:2020-10-21 07:58:35
【问题描述】:

在 jsonb 列上创建索引会影响性能吗?原因是我有一个非常大的数据集要查询。设置是我的java模型(非常大)作为blob存储在我的数据库的jsonb列中。现在我想根据负载数据中的数据条件提取报告。所以我想知道在尝试提取这些统计信息时我的产品数据库是否会受到性能影响?添加索引对这个查询有帮助吗?

CREATE VIEW Reporting_View AS
Select dms.key AS "Id",
    dms.data_model_type AS Data_Model_Type,
    dms.short_type_name AS Short_Type_Name,
    dms.version AS "Version",
    dms.payload_data -> 'requestData' ->> 'modelType' AS Model_Type,
    dms.payload_data -> 'requestData' ->> 'modelName' AS Model_Name,
    dms.payload_data -> 'requestData' ->> 'modelVersion' AS Model_Version,
    dms.payload_data -> 'requestData' -> 'arguments' ->> 'age' AS Age,
    dms.payload_data -> 'requestData' -> 'arguments' ->> 'department' AS Department,
    dms.payload_data -> 'requestData' -> 'arguments' ->> 'income' AS Income,
    dms.payload_data -> 'output' ->> 'output' AS FinalResult
From myschema.data_model_storage dms;

【问题讨论】:

  • 您必须共享查询,并让我们了解 JSON 的结构和保存它的表。
  • 在一般查询中使用例如@> 操作符可以在列上使用use GIN 索引。创建索引是为了支持查询,因此如果没有查询,就无法真正回答问题。创建这样的索引是否会影响性能?是的,INSERT、DELETE 和 UPDATE 会更慢 - 慢多少取决于很多因素。
  • 我已经用查询更新了我的问题。我试图让它尽可能简单,但实际上我可能还有 500 多个字段,但只会报告那些增加价值的字段

标签: sql json postgresql performance database-performance


【解决方案1】:

您的视图没有 WHERE 子句,因此没有索引可以直接改进它。但是作为视图,您可以在访问它时添加 WHERE 子句,而不是仅在定义它时添加。但是您的视图本身并没有公开 payload_data,因此视图的用户无法获得使用索引的方法。您可以在视图定义中使用的相同表达式上定义表达式索引,例如 ((payload_data -> 'requestData' ->> 'modelType')),通过测试视图分配的列别名,这些索引可以在视图中使用。

是的,维护索引确实有成本。

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 2015-12-23
    • 2012-09-16
    • 2015-10-20
    • 2021-06-26
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多