多くのデータを MySQL データベースに記録するアプリケーションがあります。運用中のバージョンでは、パフォーマンスを向上させるために、バッチで挿入ステートメントが既に実行されています。無関係なデータの一部がルックアップで結合できる別のテーブルに送信されるように、db スキーマを少し変更しています。
ただし、バッチ システムで動作するクエリを適切に設計しようとしています。mysql を使用したかったLAST_QUERY_ID
ので、生成されたキーを取得してそれらを一致させることを心配する必要はありません (非常に難しい作業のようです)。
ただし、さまざまな挿入ステートメントをバッチに追加する方法が見つからないようです。どうすればこれを解決できますか? 2 番目のバッチを作成し、すべての詳細クエリをそれに追加する必要があると思いますが、それは LAST_QUERY_ID の意味が失われることを意味します。
s = conn.prepareStatement("INSERT INTO mytable (stuff) VALUES (?)");
while (!queue.isEmpty()){
s.setLong(1, System.currentTimeMillis() / 1000L);
// ... set other data
s.addBatch();
// Add insert query for extra data if needed
if( a.getData() != null && !a.getData().isEmpty() ){
s = conn.prepareStatement("INSERT INTO mytable_details (stuff_id,morestuff)
VALUES (LAST_INSERT_ID(),?)");
s.setString(1, a.getData());
s.addBatch();
}
}