我有一个将大量数据记录到 MySQL 数据库的应用程序。生产版本已经批量运行插入语句以提高性能。我们正在稍微更改 db 模式,以便将一些无关数据发送到我们可以在查找时加入的不同表。
但是,我正在尝试正确设计查询以与我们的批处理系统一起使用。我想使用 mysql LAST_QUERY_ID
,所以我不必担心获取生成的密钥并匹配它们(似乎是一项非常困难的任务)。
但是,我似乎找不到将不同的插入语句添加到批处理中的方法,那么如何解决这个问题呢?我假设我需要构建第二批并向其中添加所有详细查询,但这意味着 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();
}
}