在jsonb列上创建索引会影响性能吗?原因是我有一个非常大的数据集,我想要查询。设置是将我的java模型(非常大)作为blobs存储在我的数据库的jsonb列中。现在,我想根据有效负载数据中的数据条件来拉取报告。所以我想知道当我尝试拉取这些统计数据时,我的prod db上是否会有性能影响?添加索引对此查询有帮助吗?
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;发布于 2020-10-21 23:49:34
您的视图没有WHERE子句,因此没有索引可以直接改进它。但是作为一个视图,您可以在访问它时添加WHERE子句,而不仅仅是在定义它时。但是您的视图并不公开payload_data本身,因此视图的用户无法获得它并对其使用索引。您可以在视图定义中使用的相同表达式上定义表达式索引,例如((payload_data -> 'requestData' ->> 'modelType')),这些表达式可以通过测试视图分配的列别名从视图中使用。
是的,维护索引确实是有成本的。
https://stackoverflow.com/questions/64459118
复制相似问题