MySql何時用MyISAM何時用InnoDB

2021-09-26 00:09:30 字數 1116 閱讀 2273

①innodb支援事務與外來鍵和行級鎖,myisam不支援(最主要的差別)

②myisam讀效能要優於innodb,除了針對索引的update操作,myisam的寫效能可能低於innodb,其他操作myisam的寫效能也是優於innodb的,而且可以通過分庫分表來提高myisam寫操作的速度

③myisam的索引和資料是分開的,而且索引是壓縮的,而innodb的索引和資料是緊密**的,沒有使用壓縮,所以innodb的體積比myisam龐大

myisam引擎索引結構的葉子節點的資料域,存放的並不是實際的資料記錄,而是資料記錄的位址。索引檔案與資料檔案分離,這樣的索引稱為「非聚簇索引」。其檢索演算法:先按照b+tree的檢索演算法檢索,找到指定關鍵字,則取出對應資料域的值,作為位址取出資料記錄。

innodb引擎索引結構的葉子節點的資料域,存放的就是實際的資料記錄。這樣的索引被稱為「聚簇索引」,乙個表只能有乙個聚簇索引。

④innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行,但是myisam只要簡單的讀出儲存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。

⑤delete from table時,innodb不會重新建立表,而是一行一行的刪除。

⑥innodb表的行鎖也不是絕對的,假如在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表,例如update table set num=1 where name like 「%aaa%」

在where條件沒有主鍵時,innodb照樣會鎖全表

選擇哪種搜尋引擎,應視具體應用而定

①如果是讀多寫少的專案,可以考慮使用myisam,myisam索引和資料是分開的,而且其索引是壓縮的,可以更好地利用記憶體。所以它的查詢效能明顯優於innodb。壓縮後的索引也能節約一些磁碟空間。myisam擁有全文索引的功能,這可以極大地優化like查詢的效率。

②如果你的應用程式一定要使用事務,毫無疑問你要選擇innodb引擎

③如果是用myisam的話,merge引擎可以大大加快應用部門的開發速度,他們只要對這個merge表做一些select count(*)操作,非常適合大專案總量約幾億的rows某一型別(如日誌,調查統計)的業務表。

MySql何時用MyISAM何時用InnoDB

myisam和innodb的區別 innodb支援事務與外來鍵和行級鎖,myisam不支援 最主要的差別 myisam讀效能要優於innodb,除了針對索引的update操作,myisam的寫效能可能低於innodb,其他操作myisam的寫效能也是優於innodb的,而且可以通過分庫分表來提高my...

關於何時用繼承何時用組合

沒有找到極其強烈無法辯駁的用繼承的原因的時候一律用組合 組合體現為實現層面,繼承主要體現在擴充套件方面 我覺得如果並不是需要乙個類的所有東西 包括介面和屬性 那麼就不需要用繼承,相反就用組合。用繼承那就必須是所有的都繼承,不是所有的都繼承,那麼就是濫用繼承。組合在編譯依賴和不同版本的執行時相容性上優...

何時有個內連線何時用外連線

比如有tablea tableb,tablea和tableb是一對多 需求一 根據tableb的某寫字段,查詢出tablea 分析 如果此時使用內鏈結 則相應的語句是 select a.from tablea a tableb b where a.id tableb.aid and b.code 4...