规范化:对于小词来说是否值得(需要更多查询)?

时间:2015-11-09 03:26:59

标签: mysql

假设我有一个表(数十万行),我的用户存储他们的游戏结果。在连续的6个结果中,我存储了他们在玩游戏时使用的“对象”以及他们使用的“技术”。在我的情况下,有大约30种可能的不同对象和10种可能的不同技术。每个对象和技术只有一个字。

根据规范化,我将创建一个“对象”和一个“技术”表,其中每个对象和技术都被赋予一个唯一的ID,然后使用外键将它们从我的大表中链接,列出所有结果。因此,不是在大表中使用对象的名称,而是从1-30开始有一个数字。

我的用户将在大表中进行多次查询以进行搜索 结果WHERE object = "objectname" AND technique = "techniquename"。如果我使用外键,我将需要3个查询而不是一个(首先获取objectID和techniqueID,最后搜索大表中匹配的结果)。

考虑到数据库将收到3倍以上的查询,是否值得呢?

1 个答案:

答案 0 :(得分:2)

您通常不会有3个查询,您将有一个查询加入三个表。只要你在所有外键上都有工作指数,速度的差异可以忽略不计,而且鲁棒性的增益是无价的(还有更好的空间效率,但今天的磁盘很便宜,所以这是次要的。) / p>

SELECT *
FROM hundreds_of_thousands R
JOIN techniques T ON T.id = R.technique_id
JOIN objects O ON O.id = R.object_id
WHERE O.name = "objectname"
  AND T.name = "techniquename"