2012-01-06 44 views
1

我發佈了這個問題here前一陣子。我嘗試了這些建議並得出結論:我必須做一些根本性的錯誤。 我基本上想要做的是:...仍然沒有得到結果試圖優化mysql innodb表的快速計數

我有一個包含83Mio的表格。時間/價格對。作爲使用毫秒精確unix時間戳的索引im,價格介於1.18775和1.60400之間(精度5的十進制)。 我有一個客戶需要在給定的時間間隔內取消價格密度,這意味着我想要採取指定的時間間隔並計算在此間隔內出現所有不同價格的次數。 你們會怎麼做?你如何設計/索引表格?現在我要建立一個只包含給定時間間隔的數據的臨時子表格,然後對價格進行計數。有一個更好的方法嗎?我的一般數據庫設置已經調整好,性能很好。感謝任何提示!我會盡快提供所需的任何附加信息!

回答

0

既然你有大量的數據和其不斷增長的v快速我會傾向於添加第二個表:

price (primary key) 
time(some block - also part of PK) 
count 

做一個類的事情「上的重複密鑰更新次數++插入」 。將時間字段按預定時間間隔分組(取決於您獲得的查詢類型..毫秒/秒/小時/任何)。這樣你:

don't have to mess with temp tables - with a table of this size it will write to disk - slow even with SSD 
don't have to touch the initial table every time you want to do your query - might run into locking issues 

你將不得不略去你的數據,但粒度可以預先確定,導致儘可能少的問題。

+0

感謝您的回答,即時通訊不知道如果我得到它的權利。我想盡量避免爲我的表使用預定的時間間隔,因爲時間間隔是由procedure3調用動態分配的.. – user871784 2012-01-06 15:37:49

+0

我想這就是我說的 - 你可以通過讓一些數據庫避免大量的開銷大塊的時間。 IE強制此查詢的某種最小間隔。當您查看圖表時,結果將保持不變。 – ethrbunny 2012-01-06 16:22:27