Spring Batchで複合キーを使用したページネーションの最適化
· 11分の読み時間
この記事では、Spring Batchを使用して数百万件のデータを持つテーブルをクエリする際に直面した問題とその解決策について説明します。
環境
- Spring Batch 5.0.1
- PostgreSQL 11
問題
JdbcPagingItemReader
を使用して大規模なテーブルをクエリしていると、時間の経過とともにクエリのパフォーマンスが著しく低下することに気付き、コードを詳細に調査することにしました。
デフォル トの動作
PagingQueryProvider
によって自動生成され実行されるクエリは次の通りです:
SELECT *
FROM large_table
WHERE id > ?
ORDER BY id
LIMIT 1000;