我在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。
有没有办法让这个查询更快?
答案 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);