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

标签 mysql database query-optimization

我正在重新设计一个应用程序,该应用程序在特定表中有 100,000 条记录(目前有 250,000 条记录,并且还在增加)。

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

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

谢谢

最佳答案

理想情况下,您应该将它们分成 2 个不同的表,因为一个域将对应多个站点,如果我们采用将域和站点的元数据存储在一个表中的设计,那么在这种情况下需要在站点元数据的每条记录中为域存储冗余信息。相反,如果我们有 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 索引,并且单个表中的大量行不会降低性能,但如果您正在查看巨大的数据量并希望将它划分到集群中的多个节点上,然后为它们创建独立的表将有助于使每个表都托管在各个节点上,并且数据库能够水平扩展。这是我在这种情况下看到的唯一好处。

关于MySQL 数据库 - 将数据存储在一个表中或使用查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109104/

相关文章:

sql - 如何从 MySQL 中为每 n 条记录求和

mysql - 优化选择分组依据

php - SUM 不显示正确的总和 MySQL

database - 数据库表设计建议

database - 如何在 PHPMyAdmin 控制面板中更改加密密码?

php - 在事件记录和即将到来的事件记录之间进行更改的最佳方式是什么?

sql-server - SQL Server 过程超时

optimization - 优化 MySQL 查询

javascript - PHP/MYSQL 中自动更改选项值

php - 在数据库列中搜索某些数字