0

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

以下是我的方法,其中我:选择前 1000 条记录。处理那些。选择 ID 大于我最后一组记录中最大 ID 的下 1000 条记录。继续,直到我检索到少于 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);
}
4

0 回答 0