Mysql

未進行插入更新刪除查詢時的最佳 Mysql 數據庫引擎

  • July 16, 2011

什麼應該是最好的Mysql db引擎當像Update,Insert,Delete這樣的查詢幾乎沒有進行時(99%的時間沒有進行)

數據庫有很多條目,主要是數字數據類型,選擇查詢是基於比較數值和返回結果的條件語句

我應該在這裡使用 MyISAM 嗎?

還有一件事是數據庫將被多個使用者同時使用

謝謝

出於三(3)個主要原因,我會選擇 MyISAM 而不是 InnoDB

原因 #1:MyISAM 儲存引擎提供了更簡單的機制來提高讀取性能

MyISAM 表僅由三個文件組成

  • .frm(格式文件)
  • .MYD(數據文件)
  • .MYI(索引文件)

您可以通過對錶的行格式進行一個簡單的更改來調整 MyISAM 表以加快讀取速度。

例如,MySQL Database Design and Tuning一書的第 71-73 頁建議對 MyISAM 表執行此操作:

ALTER TABLE tblname ROW_FORMAT=Fixed;

這將在內部將所有 VARCHAR 轉換為 CHAR。這也將使 MyISAM 表大 50%,但提高了讀取性能,因為使用 VARCHAR 更嚴格地檢查字元串長度,而 CHAR 的長度是固定的。

作為替代方案,您可以在 MyISAM 表上執行 myisampack 以減小 MyISAM 表大小並創建新的只讀格式。

這些是您可以在任何 MyISAM 表上執行的一次性操作。由於其聚集索引佈局,更改 InnoDB 表上的行格式有點無用(在原因 #3 中解釋)

原因 #2:MyISAM 記憶體更簡單

MyISAM 只記憶體索引頁。InnoDB 記憶體數據和索引頁面。因此,您可以配置比 InnoDB 緩衝池更小的 MyISAM 密鑰記憶體。

原因 #3:InnoDB 為保護數據背負了太多的包袱

InnoDB 在啟動時具有崩潰恢復功能,即使沒有任何問題(預防)

InnoDB 總是對數據行執行 MVCC。這為永遠不會因插入、更新或刪除而弄亂的房子創造了額外的大掃除。

InnoDB 一直執行雙索引查找,尤其是在使用非唯一索引時。發生這種情況的原因是由於InnoDB 的內部 rowid 索引與聚集索引密切相關

您可以通過在 /etc/my.cnf 中添加以下內容來繞過 InnoDB 啟動

[mysqld]
skip-innodb

MySQL 將因此更快地重新啟動。您還可以刪除 /var/lib/mysql/ibdata1、/var/lib/mysql/ib_logfile0 和 /var/lib/mysql/ib_logfile1。

警告

如果數據足夠小,將 /var/lib/mysql 掛載到 RAM 磁碟上。然後,所有將 MyISAM 與 InnoDB 進行比較的賭注都沒有了。

引用自:https://serverfault.com/questions/290743