Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库设计:在重载下快速访问我的特定问题_Mysql_Sql_Database Design - Fatal编程技术网

Mysql 数据库设计:在重载下快速访问我的特定问题

Mysql 数据库设计:在重载下快速访问我的特定问题,mysql,sql,database-design,Mysql,Sql,Database Design,让我们定义一个相当抽象的游戏来概括我的问题。在这个游戏中有球员、旗帜和球队。假设有1000000名玩家和500000种不同类型的旗帜。每个玩家在收集旗帜时移动,他们一次最多可以持有20面旗帜。然而,玩家经常会掉旗,偶尔还会从玩家那里偷旗。每个球员的目标是组建尽可能大的团队,其中球员X的队友被定义为与球员X至少有一种共同旗帜类型的任何人 在我的数据库中,我将把播放器和标志类型存储为UUID。我将在数据库中的日期时间条目中拾取和删除标志时进行记录。因此,我的数据库模式可能非常简单: table: G

让我们定义一个相当抽象的游戏来概括我的问题。在这个游戏中有球员、旗帜和球队。假设有1000000名玩家和500000种不同类型的旗帜。每个玩家在收集旗帜时移动,他们一次最多可以持有20面旗帜。然而,玩家经常会掉旗,偶尔还会从玩家那里偷旗。每个球员的目标是组建尽可能大的团队,其中球员X的队友被定义为与球员X至少有一种共同旗帜类型的任何人

在我的数据库中,我将把播放器和标志类型存储为UUID。我将在数据库中的日期时间条目中拾取和删除标志时进行记录。因此,我的数据库模式可能非常简单:

table: GameState
row1: entryId (key)
row2: player (UUID)
row3: flagType (UUID)
row4: findTime (datetime)
row5: dropTime (datetime)
给定一个玩家X,我需要进行什么查询才能找到datetime t时X团队中的所有玩家

如果我只在确定谁现在是X团队的成员时才关心速度,那么删除旧条目(标志已删除的地方)是否有显著帮助?也许我会把它们放在一个旧的数据库中,这样人们就可以对以前的团队进行不那么频繁的查询

我关心重负载下的响应速度。因此,这里的任何指针都将受到欢迎。

使用UUID(3×10^38)会因为IO开销而缩短响应时间。如果要使用MS SQL Server int类型,则有2147483647个正值,在负值范围内也有同样多的正值

索引也将决定查询响应时间。标志值索引将生成具有X标志的人员的Quicks结果。删除删除的标志将减少查询涉及的IO

所有玩家共享至少一个标志键为:

Select player from GameState where FlagType IN
(Select FlagType from GameState where Player = 'PlayerValue')

为了使上面的查询尽可能快,表应该在播放器上有一个聚集索引。在FlagType上创建一个非聚集索引。

感谢您提供有关UUID的建议。然而,对于这个查询,有一个必要的方面没有包括在内,这就是我更困惑的部分。为了加入一支球队,球员们必须同时举着相同类型的旗帜。我仍然需要高效地完成这项工作!:-|使用删除标志的历史记录表并使用上面的查询。如果历史记录表中有丢弃的标志,则可以删除“查找时间”以减少IO。