好的,所以標題有點複雜。這基本上是一個最大的每組類型的問題,但我不能爲我的生活弄清楚。Postgres,table1左連接table2,表1中每個ID只有1行
我有一個表,user_stats:
------------------+---------+---------------------------------------------------------
id | bigint | not null default nextval('user_stats_id_seq'::regclass)
user_id | bigint | not null
datestamp | integer | not null
post_count | integer |
friends_count | integer |
favourites_count | integer |
Indexes:
"user_stats_pk" PRIMARY KEY, btree (id)
"user_stats_datestamp_index" btree (datestamp)
"user_stats_user_id_index" btree (user_id)
Foreign-key constraints:
"user_user_stats_fk" FOREIGN KEY (user_id) REFERENCES user_info(id)
我想要得到的統計信息通過最新的郵戳每個ID。這是一個較大的表,在41米行附近的地方,所以我創建的user_id的臨時表,LAST_DATE使用:
CREATE TEMP TABLE id_max_date AS
(SELECT user_id, MAX(datestamp) AS date FROM user_stats GROUP BY user_id);
的問題是,郵戳是不是唯一的,因爲可以有不止一天中的1次統計更新(本應該是一個真正的時間戳,但設計這個的人是一個白癡,現在還有太多數據可以回溯)。因此,一些標識有當我做JOIN多行:
SELECT user_stats.user_id, user_stats.datestamp, user_stats.post_count,
user_stats.friends_count, user_stats.favorites_count
FROM id_max_date JOIN user_stats
ON id_max_date.user_id=user_stats.user_id AND date=datestamp;
如果我這樣做,因爲子查詢我想我可能會限制1,但我一直聽說這些都是可怕的效率低下。思考?
「......我一直聽說這些效率非常低下。」不要被捲入貨物邪教! 'EXPLAIN'是你的朋友!試試看看查詢優化器可以爲你做什麼。 – Charles 2010-07-22 04:17:47