我正在歸檔此Web論壇,該論壇通常每週清除一次。所以我在屏幕上抓取它,並將其存儲到我的數據庫(PostgreSQL)中。在兩列中使用COUNT和GROUP BY極其緩慢的SQL查詢
我也對數據做了一些分析,有些圖表供用戶欣賞,比如一天中什麼時間是最活躍的論壇等等。
所以我有一個職位表,就像這樣:
Column | Type
------------+------------------------------
id | integer
body | text
created_at | timestamp without time zone
topic_id | integer
user_name | text
user_id | integer
,現在我想爲每個用戶員額數,我的小前10名的海報表。
我想出了這一點:
SELECT user_id, user_name, count(*)
FROM posts
GROUP BY user_id, user_name
ORDER BY count DESC LIMIT 10
果然很慢。 9秒,目前在帖子表中僅有約30萬行。
如果我只在一列上組合,它只需要半秒鐘,但我需要兩者。
我對關係數據庫和SQL非常陌生,所以我不太確定這是對的,還是我怎麼做錯了?
+1是啊,這是做它的方式: )。在sql spec 1999和更高版本中,它實際上允許列出'SELECT'列表中未列入「GROUP BY」列表中的未聚合列,只要這些列在功能上依賴於GROUP BY列表。無恥的插件:http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html – 2010-02-20 17:26:13