MySql多表vs单表:性能

时间:2014-05-12 22:12:32

标签: mysql database database-design

想象一下以下类别:酒吧,吃饭的地方,商店等......

这些类别中的每一个都有一些共同的字段,例如

id, name, address and geolocation (Lat and Lng position).  

我强烈怀疑是否应该创建一个组合这些不同类别的表,或者我是否应该将其拆分为单独的表(每个类别1个表)。

我的想法是,根据每个类别表的类别和地理位置分别检索地点在检索和更新方面会更快,当然每个类别的地点数量增加时。

通过这种方法,我会为每个类别选择1个表。

但是有补充要求。每个地方都有一个所有者(用户),一个用户可以拥有多个地方。所以这意味着我要么:

  • 需要一个将用户表与中央巨型表连接起来的多对多表;
  • 每个类别都需要一个多对多表。

第二,但情况是,当用户登录时,该用户拥有的所有地点将从单个查询返回,即。 id + name,假设用户可以是多个地方的所有者 从这个角度来看,第二个选项似乎是一个非常糟糕的主意,因为看起来我需要创建查询来扫描每个表。
我意识到我可以使用索引来加速长桌扫描,但是当场所数量急剧增加时我仍然不确定性能,目前大约有8种不同的类别。

根据我提出的选项,您认为最佳解决方案是什么(或者您是否看到了我错过的更好的选项?)。 我应该指出,Web应用程序通常不会混淆类别,尽管条形图也可以创建事件。

这个问题的答案对我来说非常宝贵,因为它将为我的应用程序的进一步开发定义基础。
如果我的问题中有任何问题不清楚,请告诉我。

谢谢。

1 个答案:

答案 0 :(得分:2)

当数据相似时,单个表通常是最好的。还要考虑将来您可以添加一个新类别 - 只需更新类别字段以包含新类别,而不是构建新表,新查询和修改所有现有代码。

就速度而言,索引会使其变得无关紧要。添加一个类别字段,将其编入索引,速度不会成为问题。