2011-05-08 56 views
6

當然,對於事務數據庫來說,InnoDB是一個扣籃。 MyISAM不支持事務或行級鎖定。MyISAM vs InnoDB BI /批量查詢性能(即_NOT_ OLTP)

但是,如果我想要做大的討厭的批量查詢,觸及數億行?

MyISAM與InnoDB相比有哪些優勢?

例如,我知道的一個(小)一個......「從my_table中選擇count(*);」 MyISAM立即知道這個答案,而InnoDB可能需要一分鐘或更長時間才能下定決心。

---戴夫

回答

5

對於非常大的數據集,MyISAM可以更好地擴展。在許多情況下,InnoDB的性能優於MyISAM,直到它無法將索引保存在內存中,然後性能急劇下降。

MyISAM也支持MERGE表,這是一種「窮人的」分片。您可以即時添加/刪除非常大的數據集。例如,如果每個業務季度有1個表格,則可以創建最後4個季度或特定年份或所需範圍的合併表格。除了導出,刪除和導入以移動數據外,您可以重新聲明底層的MERGE表格內容。由於表名不會更改,因此無需更改代碼。

當您僅添加到表格時,MyISAM也更適合於日誌記錄。像MERGE表一樣,您可以輕鬆換出(旋轉「日誌」)表格和/或複製表格。

您可以將與MyISAM表關聯的數據庫文件複製到另一臺計算機,並將它們放在MySQL數據目錄中,MySQL將自動將它們添加到可用表中。你不能用InnoDB做到這一點,你需要導出/導入。

這些都是特例,但我多次利用每一個。

當然,使用複製時,您可以同時使用兩者。一個表可以是主設備上的InnoDB和從設備上的MyISAM。結構必須相同,而不是表格類型。然後你可以獲得最好的兩個。 BLACKHOLE表類型以這種方式工作。

+0

「在master上的InnoDB和在slave上的MyISAM」---確切地說。這是我目前的設置。我的思想實驗是InnoDB和MyISAM,該服務器只服務於傾向於特設和觸摸大量行的只讀查詢。我現在使用MyISAM,但我不知道它是否會向我購買快速行數以外的任何其他產品。 – 2011-05-08 21:59:41

+0

MERGE表很有趣。那些與分區表。分區表似乎更嚴格地執行語義,支持跨所有分區的唯一鍵。 「窮人碎片」的「寬鬆」語義可能更適合某些場景。我必須考慮一下這些權衡。 – 2011-05-08 22:06:41

1

這裏是比較不同性能點http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/一個偉大的文章 - 你必須從好幾個角度,包括評估該如何打算寫你的查詢和你的架構是什麼樣子。這根本不是一個黑色和白色的問題。

+0

該文章全部關於OLTP。每張圖都有「連接數」作爲x軸。對於我的場景,「連接數」== 1.所有查詢都是特設的。 – 2011-05-08 21:54:01

0

根據this文章,自第5.6版開始,InnoDB已經發展到在所有情況下都更好的地步。作者可能有點偏頗,但它清楚地概述了哪些技術被視爲平臺的未來方向。