【发布时间】:2015-06-24 18:21:35
【问题描述】:
我在 postgresql 中有两个表:ITEM (ID, TYPE) 和 ITEM_DATA (TS, ITEM_ID) 在 1:n 关系中。第一张桌子很小,第二张桌子很大。我想知道从表ITEM_DATA 中为从表ITEM 中选择的每一行选择最小值和最大值的最佳方法。目前我有这个选择,但是太慢了:
SELECT
I.*,
(SELECT MIN(ID.TS) FROM ITEM_DATA ID WHERE ID.ITEM_ID=I.ID) AS MIN_TS,
(SELECT MAX(ID.TS) FROM ITEM_DATA ID WHERE ID.ITEM_ID=I.ID) AS MAX_TS
FROM ITEM I
WHERE I.TYPE = 'X';
表 ITEM_DATA 中有一个主键,它有两个段:TS 和 ITEM_ID,表 ITEM 上还有一个索引,它有一个段:TYPE。
有没有办法让这个查询更快?
【问题讨论】:
-
ITEM表有多少行,ITEM_DATA表有多少行? ITEM_DATA 上还有很多其他列吗?
-
ITEM 有数百,ITEM_DATA 有数亿
标签: sql postgresql select query-optimization