2009-07-24 186 views
1

在具有不同条件的一个表上执行多个SQL查找或从数组中的表中获取所有项并将它们以这种方式分离出来会更快吗?我意识到我没有解释我的问题,所以这里是一个例子:多个SQL搜索与通过一个返回数组进行搜索

我想拉动职位的记录,并根据他们的发布时间,一年内,一个月内,一周等。类别的性质导致较低级别的类别完全包含在较高级别类别中。

我应该做不同条件下的SQL得出各个类别,导致多次调用数据库,或者我应该做一个搜索,返回的所有项目,然后将其从阵列中理清?感谢您的回复,抱歉,我是新手。

回答

2

通常我会说让你的数据库引擎执行排序工作,以获得更好的性能。每个数据库引擎都具有此功能,通常它可以做得比您更快。

所以我会投票使用数据库来获取你的多个组,而不是试图在内存中自己做。

0

我通常执行一个大的SQL查询,然后打破阵列起来红宝石以最小化数据库连接的数量或持续时间。

这不一定得更快,而且我从来没有基准,但少读的分贝希望意味着它将扩展更长的时间。

0

编辑:没关系,我不太了解这个问题。让SQL以方便的方式为您执行排序,然后自己处理数组。

你或许可以使其更容易,如果你让你的SELECT语句生成的辅助柱说哪个类别(例如,根据日期)记录属于。

0

最简单的,并且最容易理解。将执行多个查询的每个条件,然后每个这些结果集形成为一组。我不认为你想开始遍历结果集和复制行。

如果你真的想这样做,在一个查询,你可以尝试UNION query

SELECT *, 1 as group from posts WHERE date > '2009-07-24 00:00:00' ORDER BY date DESC 
UNION ALL 
SELECT *, 2 as group from posts WHERE date > '2009-07-17 00:00:00' ORDER BY date DESC 
UNION ALL 
SELECT *, 3 as group from posts WHERE date > '2009-06-24 00:00:00' ORDER BY date DESC 
UNION ALL 
SELECT *, 4 as group from posts WHERE date > '2008-07-24 00:00:00' ORDER BY date DESC 

之后,您只需遍历一次列表,并通过“group”列筛选到新列表中。

+0

想想吧,联盟仍然有4个问题,只是变成了一个。我坚持我的原则,你应该保持简单,只需执行4个查询。 – sixthgear 2009-07-24 18:55:07

0

这取决于。如果你在你的程序中使用OR操作符,那么事情会变得缓慢。在这一点上使用多个SQL语句会更好。

但实际上,您需要分析查询计划并自行判断它是否足够有效。运行真实世界的例子和测试测试测试。