2014-02-26 35 views
0

我有大的 MySQL表(200K +記錄)。從這張表格中,我大多讀到最後的+ -1000條記錄。在這張表中,我每天插入大約500條記錄。 我的問題。我應該使用這個表並從中讀取,還是應該使用一個較小的表,用作緩存。一個大的表vs大+緩存表

什麼我緩存表的意思是:每一次插入到表將開始觸發,該數據複製到「緩存」表,並刪除舊的(以保持最大的範圍大小1000個記錄)。現在,如果我讀了一些東西,我主要搜索「緩存」的「最後條目記錄」。用戶是否想讀取「歸檔」數據,我從表中讀取。

這是一個很好的解決方案,否則性能會受到運行觸發器和從緩存中刪除表的影響?或者..會有什麼不同嗎?

我主要運行的SQL查詢包含SELECT s,其中兩個JOIN s和範圍內的搜索結果(使用HAVING子句)。我正在使用MyISAM DB引擎。

+0

如果你有連接索引,所以你防止全表掃描,你的緩存表只會增加插入/更新開銷,但不會顯着影響選擇。 –

+0

是的。我有比較或JOINed的列上的索引。 –

回答

1

您可以檢查自己 - 創建第二個表,使用

create table cache as select * from orig_table order by insertiontime desc limit 1000 

那麼同樣的指標添加到緩存表中,原來的表有,並且做原始表的幾個選擇,和緩存表上的選擇相同。在每種情況下測量時間。

如果您有適當的索引,並且結果集大小相同(即,您不選擇緩存表不具備的所有原始表中的舊記錄),則時間差別不應該是超過百分之幾。

這可能有助於每天做一次analyze table,以防止mysql獲得有關密鑰分發和使用次優連接順序的奇怪想法。

如果您想要排除無法阻止原始聯接選擇的舊記錄,則可能需要閱讀有關partitioning的信息,該信息與您的緩存創意類似,但在數據庫引擎中實現。