我是使用MySQL的新手,我试图了解在我的数据库中存储玩家库存项目的最有效方法是什么。
所以这是设置:
有一个名为'player'的表格,每个玩家都会被分配一个唯一的'playerid',并将其设置为该表的主要索引。
每个玩家的广告资源中最多可包含24个商品,有关这些商品的信息存储在名为'player_inventory'的表格中。该表包含以下字段:
playerid,slotid,uid,stack,uses,durability
'uid'是商品的ID,'堆叠','使用'和'耐久性'< / strong>只是每个项目所需的值(例如,不同插槽中的相同类型的项目可能具有较低的'耐久性')。
问题在于,我无法在库存表中的'playerid'上设置索引,因为每个玩家最多有24个插槽条目,并且其他任何字段都不能保证唯一
所以我担心当这个表有10000个玩家的库存时,当我去查询时,这个表中可能有240,000个条目没有索引 - 有些东西告诉我可能会很慢?
我对如何优化我的数据库知之甚少,非常欢迎任何建议。
答案 0 :(得分:3)
索引 - 包括主键的唯一索引 - 可以在多个列上定义。
ALTER TABLE player_inventory ADD PRIMARY KEY (playerid, slotid);
这意味着这两列中值的组合必须是唯一的。但是给定的playerid可能出现在多行上,并且给定的slotid可能出现在多行上。
答案 1 :(得分:1)
拥有3张桌子可能是个好主意。
tblItem最多有24个(idItem = 24)
答案 2 :(得分:0)
关于为像库存这样的表设置索引有两种思路。一个涉及提供代理键,基本上是表的自动递增索引,与您的应用程序数据无关。它只是作为索引。
您可以强制执行索引的另一种方法是使用playerid和uid的组合。虽然如果一个玩家可以拥有同一个项目的多个堆栈(比如在Diabo或MMO中),你可以使用playerid和slotid的组合作为索引。您可以拥有一个由MySQL中的多个键组成的复合键。