2

在我的查询中,我想获取同一城市的所有用户。最终用户也可以使用此查询,以便他们可以查看同一城市的其他用户。我查询用户表,因此它检索所有用户,即使已经运行了查询。

现在有 2 个选项:

  1. 要么我添加一个条件来查询 user.id !=(查询运行用户的用户 ID)

  2. 或者在显示查询结果并删除正在运行查询的用户之前对其进行处理。

我使用哪一个是否重要或有任何相当大的影响?

注意 - 我的主要查询并不像查找同一个城市那么简单,而是使用 3 表连接来访问用户想要显示的数据。为了简洁起见,我只是把城市放在这里。

4

4 回答 4

1

我讨厌成为给出标准答案的人,但是....对这两个选项进行一些性能测试,然后选择更快的那个。如果差异没有定论,请选择对未来开发人员更容易的一种。我猜想将它放在查询中对开发人员来说更容易,因为结果可能会在多个地方使用,并且在使用时最好处理签入代码(因此为每次使用复制检查)。

于 2012-01-05T17:46:47.953 回答
1

这取决于,但根据我的一般经验,如果在数据库查询中添加代码和在数据库中过滤的参数会导致返回的数据显着减少,这通常意味着数据库实际上能够使用这些东西来改善内部工作集较小的执行计划(不仅仅是通过网络),通常更好。

例如,在我帮助某人最近的一个查询中,可以编写查询以返回所有朋友对。但是,从应用程序的角度来看,在任何特定页面上只需要特定人的朋友,因此不需要返回只是丢弃的额外数据,并且查询计划本身不同,因为会有更小的集合在交叉连接的一侧。无论如何,我的观点是,通常你最好向数据库提供尽可能多的信息并让它从那里工作。

于 2012-01-05T17:56:03.300 回答
0

您可以使用第一个选项,因为 3 表连接 + 条件不是那么大。

于 2012-01-05T12:32:55.907 回答
0

从提供的信息来看,选择哪个选项不应该有任何明显的区别—​​—第一个选项可能会稍微好一些,因为它需要从数据库中检索的数据略少。

于 2012-01-05T13:02:15.087 回答