MySql 多表与单表 : performance

标签 mysql database database-design

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

每个类别都会有一些公共(public)字段,例如

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

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

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

通过这种方法,我会为每个类别使用一张表。

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

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

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

根据我提出的选项,您认为最佳的解决方案是什么(或者您是否认为我错过了更好的选项?)。
我应该指出,尽管酒吧也能够创建事件,但 Web 应用程序不会经常混淆类别。

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

谢谢。

最佳答案

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

就速度而言,索引将使其变得无关紧要。添加类别字段,对其建立索引,速度将不再是问题。

关于MySql 多表与单表 : performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619791/

相关文章:

mysql - 在mysql中连接具有多个外键的表

database-design - 您是否根据保留字列表检查字段名和表名?

sql-server - 复式记账数据库设计

mysql - 无法在搜索过滤器查询中找到所需的结果

mysql - 批量 MYSQL 插入以提高数据库结构迁移的性能

database-design - 使用 Redis 的通知和新闻区

MySQL 较大记录集中的组求和

mysql - 使用 CASE EXPRESSION 的列到行

mysql 从日志表查询

MySQL索引+数学运算符