未進行插入更新刪除查詢時的最佳 Mysql 數據庫引擎
什麼應該是最好的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 進行比較的賭注都沒有了。