如何快速进行postgres搜索

时间:2018-05-05 20:47:10

标签: sql postgresql bigdata

我有一个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_1id_2

的2个索引

另外,我尝试为每个(id)使用物化视图,但问题是更新物化视图也需要很长时间。 有什么建议吗?

我在带有SSD和128 GB内存的Linux服务器上运行PostgreSQL 10.3。

谢谢,

1 个答案:

答案 0 :(得分:0)

如果要使用如下表达式对查询结果进行排序:

ORDER BY expr1, expr2, ...

您需要以下索引才能加快排序速度:

CREATE INDEX ON atable ((expr1), (expr2), ...);

如果由于表达式包含非IMMUTABLE的函数而不起作用,则无法使用索引加速排序。在这种情况下,请考虑使用IMMUTABLE表达式重写您的查询。