Postgresql:最有效的查询选择"最低的"并且"所有更高的"

时间:2017-01-24 15:22:39

标签: sql database performance postgresql

让我们有一个数据库表,e。 G:

t_times (id INTEGER, created TIMESTAMP WITHOUT TIME ZONE);

是否有可能编写一个查询,该查询将返回在给定日期之后创建的所有条目以及在给定日期之前创建的最新条目?

UNION很简单,但是有没有更快的方法呢?

SELECT * FROM t_times WHERE created >= ?
UNION
SELECT * FROM t_times WHERE created < ? ORDER BY created DESC LIMIT 1;

1 个答案:

答案 0 :(得分:1)

union all更快:

(SELECT * FROM t_times WHERE created >= ?)
UNION ALL
(SELECT * FROM t_times WHERE created < ? ORDER BY created DESC LIMIT 1);

created上的索引可能会快一点:

select t.*
from t_times t
where t.created >= (select max(t2.created) from t_times where t2.created < ?);

这个想法是索引将用于子查询。 。 。非常快。然后索引用于获取行。但是,对于使用union all的查询,这只会略有改进。