2009-02-12 60 views
0

我有一個數據庫效率問題。mySQL數據庫效率問題

這裏是我的表中的一些信息:

約500-1000記錄-table -records相加,每天刪除。 - 通常每天都有大約相同數量的添加和刪除(活動記錄的大小保持不變)

現在,我的問題是.....當我刪除記錄時,...我應該(A)刪除記錄並將其移動到新表中?或者,...我應該(B)只有和「活動」列,並且當它沒有長時間活動時將記錄設置爲0。

我不願意使用B的原因是因爲我的網站是基於用戶能夠過濾/排序這個500-1000記錄的表(使用ajax)....所以我需要它儘可能快,..(我猜有更多記錄的表會慢慢過濾)...我正在使用mySQL InnoDB。

任何投入將是巨大的,謝謝

安德魯

回答

1

實際上,這不是一個關於數據庫效率的問題,而是關於網絡延遲和通過線路發送的數據量的問題。就MySQL而言,1000行或100k行將非常快,所以這不是問題。但是,如果您在這些行中獲得大量數據,並且您通過AJAX將其全部傳輸到客戶端進行過濾,則網絡延遲是您的瓶頸。如果你每行發送少量字節(比如說20),並且你的表的長度約爲1000條記錄,那麼這不是一個大問題。另一方面,如果你的表增加了(不活動的記錄)到20k行,現在你發送了400k而不是20k。你的用戶會注意到。如果記錄較大,隨着表格的增長,問題會更加嚴重。

你應該真的在服務器端進行過濾。讓MySQL花費2ms過濾表格,然後再花一整秒鐘或兩次通過Ajax發送它。

0

這取決於你過濾/排序上的表是如何編制索引的內容。 (B)(可選擇使用時間戳)並定期將它們歸檔到單獨的表(A)(可以是整體的,也可以是基於的)第三種並非不尋常的選項,您可以採用混合方法時間戳年齡)。實際上,如果您的表格的順序爲1000行,那麼可能不值得對它過分誇大(假設其他因素的可擴展性已知)。

0

如果您需要爲了將來的目的而保留記錄,我會設置一個無效位。

只要您在表格上有一個主鍵,在記錄時性能應該很好。

此外,如果您在客戶端進行過濾/排序,則只需要檢索一次記錄。

3

〜1000個記錄是非常小的數字。

如果一條記錄可以被刪除並在稍後重新添加,可能有一個「活動」指標是有意義的。

+0

+1。 1000行不算什麼,即使沒有適當的索引,InnoDB也會立即咀嚼它(儘管你顯然應該有這些)。 – bobince 2009-02-12 03:02:01

+0

謝謝,我會記住 – Andrew 2009-02-12 05:10:16