在一个具有不同条件的表上执行多个SQL查找或者从表中获取表中的所有项目然后将它们分开是否更快?我意识到我并没有很好地解释我的问题,所以这是一个例子:
我想在帖子上提取记录,并根据发布时间(例如一年内,一个月内,一周内等)将其显示在类别中。类别的性质导致较低级别的类别完全包含在内上层的。
我应该为每个类别执行不同条件的SQL查找,导致多次调用数据库,还是应该进行一次搜索,返回所有项目然后从数组中排序?感谢您的回复,对不起,我是新来的。
答案 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。