如何从另一个表中选择MIN和MAX

时间:2015-06-24 18:21:36

标签: sql postgresql select query-optimization

我在postgresql中有两个表:ITEM(ID,TYPE)和ITEM_DATA(TS,ITEM_ID),1:n关系。第一个表很小,第二个表很大。我想知道从表ITEM中为每个选择行选择表ITEM_DATA的最小值和最大值的最佳方法。此刻我有这个选择,但它太慢了:

<p class="post">This is just a regular post</p>
<p class="post highlighted">But this one's new!</p>

ITEM_DATA表中有一个主键,它有两个段:TS和ITEM_ID,表ITEM上还有一个索引,它有一个段:TYPE。

有没有办法让这个查询更快?

2 个答案:

答案 0 :(得分:1)

我认为你应该改变ITEM_DATA上PK列的顺序。

答案 1 :(得分:0)

SELECT i.*, mima.mi, mima.ma
FROM item i
JOIN (
        SELECT DISTINCT item_id
        , MIN(ts) as mi
        , MAX(ts) as ma
        FROM item_data
        GROUP BY item_id
        ) mima ON mima.item_id = i.id
WHERE i.type = 'X'
        ;

并且,是的:您的查询将受益于索引

    CREATE INDEX ON item_data(item_id,ts);