【发布时间】:2014-06-06 20:12:11
【问题描述】:
我有以下查询返回正确的结果,但我确信这不是获得这些结果的最佳方式...
select * from (
select * from features where feature_area = 0
order by updateStamp desc limit 1
) as feature_1
union all
select * from (
select * from features where feature_area = 1
order by updateStamp desc limit 1
) as feature_2
union all
select * from (
select * from features where feature_area = 2
order by updateStamp desc limit 1
) as feature_3
这会返回类似于...的结果
id feature_area title updateStamp
--------------------------------------------------------------------
103 0 This is a title 2014-04-15 09:26:14
102 1 Another title 2014-03-27 14:09:49
98 2 More title 2014-01-21 16:00:55
是否可以使用联接而不是联合来改进这一点,如果可以,请您指出正确的方向。
编辑:
查看了@Ben 指出的其他选项,我似乎已经为我的特定目的获得了最快的查询(尽管不是那么吸引人)。如果您认为我错了,请随时纠正我。我不是专家,所以我在征求意见。
【问题讨论】:
-
你能提供一个sqlfiddle
-
@Ben 这个答案表明我已经有了最好的方法??
-
可能是@Tom,是的。只有你可以决定你是否有最好的方法。如果你所拥有的足够快,那么你不需要改变任何东西。如果速度不够快,请尝试其他选项。如果您仍然不能足够快地得到它,请回到这里提出这个问题,但包括您的索引、表 DDL 以及您尝试过的每种方法的解释计划,并且有人可能能够提供帮助。
-
你不能只通过
feature_area订购吗? -
@Tom 下面的答案使用两个带有 group by 的 select 语句。这可以节省数据库时间,而不是执行 3 个单独的选择语句和组合结果集。如果您担心性能,您可以随时查看统计数据,看看哪个性能更好。如果您采用以下方法,索引可以进一步加快速度。
标签: mysql sql join union greatest-n-per-group