多个SQL搜索与搜索一个返回的数组

时间:2009-07-24 18:27:25

标签: sql mysql ruby-on-rails database performance

在一个具有不同条件的表上执行多个SQL查找或者从表中获取表中的所有项目然后将它们分开是否更快?我意识到我并没有很好地解释我的问题,所以这是一个例子:

我想在帖子上提取记录,并根据发布时间(例如一年内,一个月内,一周内等)将其显示在类别中。类别的性质导致较低级别的类别完全包含在内上层的。

我应该为每个类别执行不同条件的SQL查找,导致多次调用数据库,还是应该进行一次搜索,返回所有项目然后从数组中排序?感谢您的回复,对不起,我是新来的。

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我通常执行一个大型sql查询,然后在ruby中中断数组以最小化数据库连接的数量或持续时间。

这不一定更快,我从来没有对它进行基准测试,但对数据库的读取数量减少有望意味着它会扩展更长。

答案 2 :(得分:0)

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

如果让SELECT语句生成帮助列以说明记录属于哪些类别(例如,基于日期),则可能会更容易。

答案 3 :(得分: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 

之后,您只需要遍历列表一次,然后通过“组”列过滤到新列表。

答案 4 :(得分:0)

这取决于。如果你在程序中使用OR运算符,那么事情可能会变慢。在这一点上使用多个SQL语句会更好。

但实际上,您需要分析查询计划并自行决定它是否足够高效。运行真实世界的例子和TEST TEST TEST。