我有一个Postgresql数据库,在一个表中有超过1000亿行。
表架构如下:
id_1 | integer | | not null |
id_2 | bigint | | not null |
created_at | timestamp without time zone | | not null |
id_3 | bigint | | |
char1 | character varying(20) | | not null |
lang | character(6) | | not null |
gps | point | | |
some_dat | character varying(140)[] | | |
JSON | jsonb | | not null |
我试图在JSON对象内搜索并按JSON对象对数据进行排序,但问题是排序和返回数据需要花费太多时间。
同样,在按created_at
排序数据时,结果也需要时间。
我试图让我的应用程序尽可能实时。
我有id_1
和id_2
另外,我尝试为每个(id
)使用物化视图,但问题是更新物化视图也需要很长时间。
有什么建议吗?
我在带有SSD和128 GB内存的Linux服务器上运行PostgreSQL 10.3。
谢谢,
答案 0 :(得分:0)
如果要使用如下表达式对查询结果进行排序:
ORDER BY expr1, expr2, ...
您需要以下索引才能加快排序速度:
CREATE INDEX ON atable ((expr1), (expr2), ...);
如果由于表达式包含非IMMUTABLE
的函数而不起作用,则无法使用索引加速排序。在这种情况下,请考虑使用IMMUTABLE
表达式重写您的查询。