java - 优化从大表中获取数据

标签 java sql performance postgresql optimization

我有一个包含数百万条记录的 PostgreSQL 表。我需要处理每一行,为此我使用该表中的一列,即 'isProcessed' 所以默认情况下它是 false ,当我处理它时,我将其更改为 true

现在的问题是记录太多,并且由于异常,代码绕过了一些记录,留下了 isProcessed=false ,这使得执行速度非常慢。

我想使用索引,但使用 boolean 值没有帮助。

请提供一些优化技巧或一些更好的实践。

更新:

我没有代码,这只是我的同事询问我意见的问题。

最佳答案

通常, boolean 值上的索引不是一个好主意,但在 PostgreSQL 中,您可以使用部分索引 http://www.postgresql.org/docs/9.3/interactive/indexes-partial.html 来创建仅包含一个值的条目的索引。 。它最终会成为一个等待你处理的事物队列,一旦完成就会掉落。

CREATE INDEX "yourtable_isProcessed_idx" ON "public"."yourtable"
USING btree ("isProcessed")
WHERE (isProcessed IS NOT TRUE);

当它寻找下一个要处理的项目时,这将使生活变得更轻松。理想情况下,您应该一次处理多个数据,特别是如果您可以在单个查询中执行此操作,但一次处理数百万个数据可能会令人望而却步。在这种情况下,你也许可以这样做

update yourtable
set ....
where id in (select  id from yourtable where isProcessed = false limit 100 )

如果您必须一次只做一件事情,我仍然会限制您检索的内容,因此可能会检索

select id from yourtable where iProcessed = false limit 1

关于java - 优化从大表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25210475/

相关文章:

java - 为什么 Java DatagramSocket 没有收到客户端发送的所有 udp 数据包?

java - 无法抗拒工作

mysql - 如何获取其他表上的元素计数并按其排序

mysql - 按相似字符串分组

c# - SQL Server中如何查询XML列中的数据

java - 文本文档正在变成文件夹

java - 布局问题 : autogrow label (SWT)

performance - 平均处理速度越来越慢

mysql with OR 语句返回全表扫描

javascript - 每分钟 JSON 文件解析和合并