MySQL数据库 - 将数据存储在一个表中或使用查找

时间:2012-10-28 13:19:36

标签: mysql database query-optimization

我正在重新设计一个在特定表格中拥有100,000个记录的应用程序(目前为250K且正在增长)。

该表包含网站和域名的信息。

为了速度和资源,我是否应该在原始表中包含有关任一实体的所有数据,或者我应该使用两个查找表来存储未共享的信息 - 例如,一个存储所有特定域的查找表信息和存储所有网站特定信息的信息?

由于

2 个答案:

答案 0 :(得分:1)

理想情况下,您应该将它们拆分为2个不同的表,因为单个域对应于多个站点,如果我们采用域和站点的元数据存储在单个表中的设计,那么就会需要在站点元数据的每个记录中为域存储冗余信息。相反,如果我们有两个单独的表,其中域表每个域有一个记录,一个站点列表作为记录中的一个字段和站点表中的域名列来确定给定站点的域,将确保有组织的存储和数据的冗余。这是传统RDBMS系统的主要原则,这就是为什么我们有多个表的概念。

此外,如果您想要真正扩展数据库,可以考虑使用NOSQL数据存储,因为您说数据不断增加。 Apache HBase可能是一个很好的解决方案,它具有将相关信息分组在一起的概念。

修改

问题中的澄清:

Just to be clear, domain and sites are not linked. They're just different entities like a domain with no traffic or revenue would be classed as a domain and have domain related data stored for it like number of hyphens or registrar while a domain with a Wordpress install for example and exisitng traffic would be classed as a site - not a domain - and have site specific information stored. Would this change your answer?

在它们不相互关联的情况下,我不认为将数据拆分成多个表将以任何方式提供帮助,除非您要使用分布式RDBMS系统。在单节点托管数据库的情况下,行仍然由站点/域id索引,并且单个表中的大量行不会降低性能但是如果您正在查看数据的庞大大小并且希望将它划分到集群中的多个节点上,然后为它们提供独立的表将有助于使每个表都托管在各个节点上,并且数据库能够水平扩展。这是我在这种情况下看到的唯一好处。

答案 1 :(得分:0)

应用程序的性能很大程度上取决于应用程序使用的查询类型。将所有数据存储在一个表中并不一定会降低性能,但很可能会增强它。如果您的表格保存了一些由XY先生拥有的信息,那么您浪费磁盘空间几千次。

规范化您的数据库(将数据拆分)可能会有所帮助,但是您必须知道要对数据做什么来回答这个问题。