假设我运行一个游戏网站,用户在该网站上相互下棋。我有一个MySQL表,其中包含所有游戏及其各自的国际象棋动作:
游戏表(psuedo语法):
gameId INT
player1Id INT
player2Id INT
gameEnded DATETIME NULL
gameNotation TEXT
几行看起来像:
30021, 2001, 3020, '2013-08-01 12:00:00', '1. e4 e5 2. Nf3 Nf6'
30022, 3020, 2001, NULL, '1. d4'
移动100步或更多步后,gameNotation字段可能会变得相当大。
对于我的问题:我的表与上面的表相似,它包含100万行和计数,这使它在性能方面具有挑战性。
您将如何对这个表(MySQL 6.5)进行分区?或者,您可能会将gameNotation列移到自己的表中吗?我在同一张桌子上有正在进行的和结束的比赛,也许我应该把它们分开?我不确定从性能的角度来看什么才是最合理的。
谢谢你抽出时间!
这需要适当的索引,但100万行并没有那么大。
关键问题可能是TEXT
列包含多个值,因此需要全文搜索和/或线性搜索。您可以更改DB结构以存储单个值,可能是通过将移动移动到它们自己的表并使用一对多关系。
这将有助于减少碎片,因为所有记录的大小都相同(假设没有其他可变大小的列)。
可能是。
gameId INT
player1Id INT
player2Id INT
gameEnded DATETIME NULL
gameNotation TEXT
我可能会把它分解为:
游戏:
id INT NOT NULL <-PK,AUTOINCREMENT
white_player_id INT NOT NULL
black_player_id INT NOT NULL
gameEnded DATETIME
移动:
id INT NOT NULL <-PK,AUTOINCREMENT
game_id INT NOT NULL
move VARCHAR(9) NOT NULL //Change length if necessary