0

約 600 万件のレコードを含むテーブルがあります。IDJava で処理するには、各行の を取得する必要があります。これ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