我有一个 3M 行的表。
我想检索所有这些行并使用dc.js
.
我遇到的问题是,对于单个列,它需要大约 70 秒。
如果我编写查询,检索这些行大约需要 240 秒。
我在这样的列上使用选择查询。
SELECT COL1, COL2 FROM TABLE
而已。没有分组,什么都没有。
但这需要很多时间。
听说过索引,我为我使用的列创建了一个索引。但即使没有丰硕的成果。
我有一个 3M 行的表。
我想检索所有这些行并使用dc.js
.
我遇到的问题是,对于单个列,它需要大约 70 秒。
如果我编写查询,检索这些行大约需要 240 秒。
我在这样的列上使用选择查询。
SELECT COL1, COL2 FROM TABLE
而已。没有分组,什么都没有。
但这需要很多时间。
听说过索引,我为我使用的列创建了一个索引。但即使没有丰硕的成果。
我们不应该在任何查询中检索 3M 行。而且发送3M的记录总是会花费很多时间(跟数据库无关,就是传输速度)。它会杀死你的 IO。大部分时间花在从请求发起者和 postgres 数据库的传输 (IO) 上。
考虑将这些请求分解成一批异步请求,然后流式传输到客户端。这意味着重构您的前端代码 (javascript) 以改善用户体验。
您没有指定使用 PostgreSQL 的环境。
例如,在 Node.js 中,您可以通过使用pg-query-stream 流式传输数据并同时在客户端呈现数据来解决此问题,因此客户端不必等待查询完成并可以看到中间结果。
不过,这可能不是最好的解决方案。更好的解决方案是在数据库函数中实现数据聚合以提供更小的数据子集。