2012-06-09 78 views
0

我們有一個非常龐大的Mysql表格,它是MyISAM。無論何時我們運行優化表命令,該表都會被鎖定並且性能會受到影響。該表不是隻讀的,因此創建臨時表並交換它們可能無法實現。我們也無法分割桌子。無需分區即可優化大型mysql表的表格

是否有任何其他方式/工具來實現優化表功能而不降低性能。任何建議都會有很大的幫助。

在此先感謝。

+2

是否有一個原因,你在使用'MyISAM'? – Quassnoi

+0

只是爲了在SELECT中有更好的速度。 –

回答

0

http://dev.mysql.com/doc/refman/5.5/en/optimize-table.html

對於InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE,這 重建表(...)

因此,我不希望在切換到任何改善InnoDB,正如Quassnoi可能提出的那樣。

根據定義,OPTIMIZE TABLE需要對錶中的一些獨家訪問,因此OPTIMIZE'ation在性能降低

然而,可能會有一些步驟來減少OPTIMIZE所花費的時間,這取決於你如何表是「巨大的」:

  • 如果你的表有很多字段,你的表可能需要標準化。相反,您可能希望通過將列分散到幾個「較窄」的表中來取消規範化,並建立一對一的關係。
  • 如果您的表有很多記錄,請在您的應用程序代碼中實施「手動」分區。一個簡單的步驟就是創建一個保存很少更新記錄的「歸檔」表。這樣你只需要優化一小部分記錄(非歸檔表)。
+1

改進將是你不需要'優化'表。 –

+0

如果您將「活動數據集」(即我的上述文章中的「非歸檔」表)保留得足夠小,那麼確實可能完全不需要優化它。 – RandomSeed