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