2012-01-05 16 views
2

在我的查询中,我想获取同一城市的所有用户。此查询也可供最终用户使用,以便他们可以查看同一城市的其他用户。 我查询用户表,以便它检索甚至谁运行查询的所有用户。把所有的排除条件放在sql查询中或首先获取所有结果,然后在内存中执行排除代码?

现在有2个选项:

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

  2. 或显示其前处理查询结果和删除正在运行查询的用户。

它有什么重要的影响,或者我用哪一个效果?

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

回答

1

这取决于,但根据我的一般经验,如果在数据库查询中添加代码并且在数据库中进行筛选会导致数据显着减少,这通常意味着数据库实际上能够使用这些东西通过内部较小的工作集(不仅仅是通过电缆)制定更好的执行计划,而且通常更好。

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

0

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

0

从提供的信息看,它不应该在选择哪个选项时产生任何显着差异 - 第一个选项可能稍微偏好,因为它要求从数据库中检索的数据略少。

1

我讨厌成为标准答案的家伙,但....做两个选项的性能测试,并选择一个更快的。如果差异没有定论,那么选择一个对未来开发者来说更​​容易的方法。我猜想把它放在查询中对于开发人员来说更容易,因为结果可能会在多个地方使用,并且在使用代码时执行代码检查可能是最好的处理方式(因此可以复制每次使用的检查)。

相关问题