0

私は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
4

1 に答える 1

1

これを試してください。

UPDATE t1 set t1.totalScore = t1.totalScore+1000 
from playerstatstable t1  inner join entrytable t2
on t.PlayerID = t2.PlayerID 
and t2.score = 1 and t2.entryState = 5

MYSQL の場合

UPDATE
playerstatstable t1, entrytable t2
set t1.totalScore = t1.totalScore+1000 
where t.PlayerID = t2.PlayerID 
and t2.score = 1 and t2.entryState = 5
于 2013-06-06T13:49:46.647 に答える