我有一个代码将播放器数据从条目上传到MySQL数据库。查询看起来是这样的:Java MySQL更新优化
uploadPlayers = getManager().getMysqlManager().getConnection().prepareStatement("UPDATE players SET name=?, ips=?, gamemode=?, lastlogin=?, timeplayed=?, rank=?, badges=?, level=? WHERE uuid=?");
以及上传玩家的方法是这样的:
@Override
public void saveDataToDatabase() {
try{
for (final Entry<String, IPlayerData> entry : playerdatalist.entrySet()) {
final IPlayerData pd = entry.getValue();
SH.uploadPlayers.setString(1, pd.getName());
SH.uploadPlayers.setString(2, pd.getIp());
SH.uploadPlayers.setInt(3, pd.getGamemode());
SH.uploadPlayers.setString(4, SH.getManager().getMysqlManager().getDate(pd.getLastlogin()));
SH.uploadPlayers.setLong(5, pd.getTimeplayed());
SH.uploadPlayers.setInt(6, pd.getRank());
SH.uploadPlayers.setString(7, pd.getBadgesAsString());
SH.uploadPlayers.setInt(8, pd.getLevel());
SH.uploadPlayers.setString(9, pd.getUUID());
SH.uploadPlayers.addBatch();
}
SH.uploadPlayers.executeBatch();
}catch(SQLException e){
e.printStackTrace();
}
有一个在入境和在数据库中大约1500个的球员。 但每次使用代码时,它会使用15-20秒更新所有玩家。 我怎样才能让它走得更快并优化它?
将数据上传到临时表中。然后使用'join'做一个'update'语句。如果数据不在数据库中,那么'load data infile'是一种获取数据的快速方法。 –
你有'uuid'列索引吗? –
不,我没有索引uuid列,但不仅仅有助于选择? –