从Java中检索mssql DB中数百万条记录的最佳和内存安全方法?

时间:2015-09-02 23:29:29

标签: java sql-server jdbi

我有一张表,里面有大约600万条记录。我需要检索每行的ID以在Java中处理。 ID是字母数字nvarchar(8)。我想以记忆安全有效的方式做到这一点。

以下是我的方法,其中我:选择前1000条记录。处理那些。选择下一个1000条记录,其中ID大于我上一组记录中的最大ID。继续,直到我检索到少于1000条记录的集合。

我相信我的策略会以内存安全的方式检索所有记录,但不知道是否有更快/更好的策略。 (同样不能肯定战略将检索所有记录,我需要在具有更多资源的环境中进行测试,我的非常不稳定)。

List<String> ids = myDao.getTopThousandIds();
processIds(ids);

while(skus.size() == 1000) {
  ids = myDao.getTopThousandIdsGreaterThan(ids.get(ids.size() -1));
  processIds(skus);
}

public interface MyDao {
  @SqlQuery("SELECT TOP 1000 [ID] FROM [tbl] WITH(NOLOCK) ORDER BY [ID] ASC")
  List<String> getTopThousandIds();

  @SqlQuery("SELECT TOP 1000 [ID] FROM [tbl] WITH(NOLOCK) WHERE [ID] > :id ORDER BY [ID] ASC")
  List<String> getTopThousandIdsGreaterThan(@Bind("id") String id);
}

0 个答案:

没有答案