2010-10-12 35 views
3

我有一張桌子,我只是寫作而已。我應該使用InnoDB或MyISAM作爲「只寫」表嗎?

把它想象成一個「交易」列表,我保留所有的細節,並且我還有一個「總計」存儲在另一個表中。該總數對於性能而言是多餘的,但是如果需要,可以從該交易表中重新計算。

從性能的角度來看,更好的做法是記住有幾個人會同時插入這張從未讀過的表(永遠不會更新)?

我應該使用InnoDB還是MyISAM?

(我已經在這裏有性能問題,我不是過早地優化)

回答

4

使用歸檔存儲方法這一點。它正是爲這種多寫多讀應用而設計的。

+0

謝謝你的想法!我不知道Archive引擎。現在,從這篇文章看來,這似乎會節省磁盤空間,但它不會比MyISAM快得多,對嗎? – 2010-10-12 12:42:44

+0

ARCHIVE將比myISAM寫作更快。但是,如果你必須閱讀它,它會很慢,因爲一切都是全表掃描。你對申請的解釋表明你很少會閱讀,所以這應該是好的。 – 2010-10-13 13:45:48

2

通常情況下,您將使用MyISAM來處理只增長的​​表格。 MyISAM還具有支持MERGE表格的優點,所以您不必擁有一張巨大的表格。

但是,如果你「從不」讀取它,爲什麼要使用表?只需直接寫入文件即可。我很好奇你的性能問題。您可以通過複製查看Blackhole表類型。黑洞上的主人,MyISAM或檔案上的奴隸。

+0

謝謝你的回覆。我*可能*想要從中讀取數據,並且從結構化表格中這樣做會比我需要的文件更方便。當然,如果擁有這樣的表格是不切實際的,我可以去看一個文件,但是由於我管理的是這個文件,所以它看起來應該不是這樣。 至於Blackhole,我們還沒有做複製,只有一個MySQL。 – 2010-10-12 13:08:43

+0

性能問題是,有時候,整個MySQL服務器凍結幾秒鐘,延遲所有其他請求,並通過「慢查詢日誌」,這個查詢似乎顯示了很多,所以它看起來很可疑,即使它應該合理無辜... – 2010-10-12 13:09:30

+0

聽起來像是一個僵局? – yfeldblum 2010-10-12 13:15:48

0

你也可以使用帶INSERT DELAYED的MyISAM立即從你的插入返回並讓mysql在單獨的線程中空閒時插入這些數據。它會從應用程序的角度加快插入速度,避免插入爭用。然而,如果服務器在寫入之前崩潰,則會打開不一致的數據...