这是我很长时间以来一直在想的一个问题。我将尝试通过示例进行解释,但这是一个普遍的问题。
假设您有两个表:
现在,假设我要显示最近24小时内创建的所有帖子。在此表中,我要显示创建此帖子的用户的名字,姓氏,...。该查询可能类似于:
SELECT ... FROM posts,users WHERE posts.user_id = users.id AND [过去24小时]
现在,我的问题。由于很可能一个用户在过去24小时内创建了多个帖子,因此我们基本上是一次又一次地检索他/她的名字,姓氏,...。换句话说,上面查询的结果集包含重复数据(但不包含重复行)。
这样做不是更好吗?
?
我知道这是一个非常笼统的问题,但欢迎提出任何见解。谢谢!
最佳答案
两种方法都可以,但是您遇到了重要的部分:
在应用程序级别执行。
对我来说,我将提取重复的数据,以便结果集的每一行都包含我需要的所有数据。 SQL在JOIN
和set操作上比几乎任何声明性语言都更有效。
如果将数据放在一起,则可以根据需要在下游将其拆分的时间更短,并且只需要对数据库进行一次调用即可,而无需两次调用。
随着重复数据的增长,这样做的好处会减少。如果只是几个领域,那将不会有太大的影响。如果是数十个冗余数据字段,那么性能差异将更加明显。
对于您的特定示例,最好在单个查询中全部完成。
您可以在应用程序级别消除重复操作(如果您感到困扰),但是对于同一用户多次返回的2或3个其他字段,与进行多个数据库调用相比,意义不大。