我有一张表,里面有大约 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);
}