我有一個代碼將播放器數據從條目上傳到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列,但不僅僅有助於選擇? –