首页 > 解决方案 > MySQL 一张表 vs 多张表(相同数据)

问题描述

我正在建立一个网站来监控一堆物联网设备。例如,每个设备的在线/离线状态以及它可能报告的某些设备特定信息、IP 地址、温度等,这些都会有所不同。仅供参考,这些设备通过连接这些设备的处理器/计算机向我的站点报告,然后报告回(最多 255 个设备,但在大多数情况下,在 10 到 100 个设备之间)。

迄今为止,我的方法是为每个处理器创建一个新表,其中仅包含该处理器设备将驻留在其中。然而,在与一位同事的讨论中,他建议这可能不是最好的方法,因为它不是特别有效并且以后可能会出现问题,例如,如果您想稍后添加另一列,则必须将其添加到可能的 50+不同的处理器表等

相反,因为所有这些表都将具有相同的结构,例如相同数量的列等,只是设备数量(例如行)会有所不同,所以一个包含所有这些行的大表会是更好的方法吗?

我知道,在 MySQL 术语中,“扫描”是一项昂贵的操作,对于一个大表,我认为会有更多的扫描,因为我必须进行过滤,因为我每次都必须获取一个大数据集,然后将其过滤掉进入一个视图,例如针对 5000 多行的处理器或位置与许多 100 行的小表。此外,我认为此表中的数据将被写入分配,例如,每次设备离线时,离线标志都会更新,所以我不确定这是否使它更适合单个表而不是一个大表。

适当的有很多不同的方法来解决这个问题,我只是不想走下一个兔子洞,以后再后悔。如果这很重要,前端将是 PHP。

标签: mysql

解决方案


你的朋友是对的。创建许多表来存储非常相似的数据将浪费配置时间,并且是存储此信息的低效方式。相反,创建一个表,其中包含可以区分您的机器的列(机器 ID、类型等),以及所有机器将报告的信息(温度、IP 等)的列,您将拥有一个更有条理的数据库,当您以后想要更新表时,它会更简单。

SQL 对搜索查询进行了很好的优化,除非您存储数百万行,否则我认为您在性能方面会很好。


推荐阅读