簡體   English   中英

按SUM排序時的最佳SQL查詢

[英]Optimal SQL Query when ORDERing BY SUMs

只是注意,這個問題是我先前問題之一的擴展 參數已更改,因此我需要一個新答案。

我有一個MySQL表,該表具有四個字段post_id(unique int),user_id(int),category(varchar),score(int)。

我的目標是最終得到兩個值,一個是“ x”類別中用戶帖子的百分比。 第二個是該“ x”類別中所有分數的總和。 為此,我假設我需要從MySQL獲取三個值:

  • SUM( score )GROUP BY category
  • COUNT( post_id )GROUP BY category
  • COUNT( post_id

因此,這足以編寫一個簡單的查詢。 這是困難的部分:我需要按(百分比+總和)之類的計算順序來排名前50位用戶。 我想我可以編寫一個在子查詢/ JOIN中執行上述所有數學運算的查詢,然后將ORDER BY和LIMIT放入主查詢中,但這似乎效率很低。 我正在計划200萬用戶,每個用戶可以有5000個帖子。 如果我這樣進行查詢(我認為),那么遍歷所有這些記錄將需要永遠的時間。

像這樣運行查詢的最有效方法是什么? 我已經閱讀了有關MySQL視圖的想法,這似乎是一個不錯的主意,但我也閱讀了它們存在巨大的性能問題。 這值得么?

還是不可能? 我是否應該滿足每天幾次執行CRON作業並僅存儲虛假實時數字的條件?

您已經有一個龐大的用戶數據庫和很多帖子嗎?

如果您不這樣做,則可以創建一個跟蹤這些總和和計數的元表。 當用戶添加帖子或分數時,這些實時更新將很容易。 您不必每次都需要重新統計統計信息的職位和分數時,就不必掃描數據庫,因為您已經將它們存儲在表格中了。 相反,在此表上進行計算將很容易。

在創建將所有內容添加到元表的功能時,開始時需要做一些額外的工作。 但是從長遠來看,它可能會有所回報。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM