私は2つのテーブルを持っています:
playerstatstable、entrytable (下記参照)
playerstatstable には 100,000 行あり、 entrytable には 100 万行あります
私がやりたいことは、次のようにplayerstatstableを更新することです
UPDATE playerstatstable set totalScore = totalScore+1000 where PlayerID = (Select PlayerID from entrytable where score = 1 and entryState = 5 and playerstatstable.PlayerID = entrytable.PlayerID);
エントリの約 1/10 が状態 5 になり、その約 1/5 がスコア = 1 になります。
したがって、更新が必要な20,000のplayerstatstable行に関連付けられている約20,000のエントリがあります。
1) より良い更新ステートメントはありますか?
2)これを改善するインデックス/キーの配置はありますか?
CREATE TABLE `playerstatstable` (
`PlayerID` int(11) NOT NULL,
`totalScore` int(11) DEFAULT '0',
PRIMARY KEY (`PlayerID`),
UNIQUE KEY `PlayerID_UNIQUE` (`PlayerID`),
KEY `idx_m` (`monthTime`),
KEY `idx_w` (`weekTime`),
KEY `idx_d` (`dayTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `entrytable` (
`EntryID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`PlayerID` int(10) unsigned DEFAULT '0',
`entryType` bit(1) DEFAULT b'0',
`entryState` int(11) DEFAULT '1',
`score` int(11) DEFAULT '0',
`rank` int(11) DEFAULT '0',
PRIMARY KEY (`EntryID`),
UNIQUE KEY `EntryID_UNIQUE` (`EntryID`)
) ENGINE=InnoDB