MyISAM與InnoDB 的區別

2021-10-04 18:02:35 字數 800 閱讀 2242

innodb支援事務,myisam不支援,對於innodb每一條sql語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條sql語言放在begin和commit之間,組成乙個事務;

innodb支援外來鍵,而myisam不支援。對乙個包含外來鍵的innodb表轉為myisam會失敗;

innodb是聚集索引,使用b+tree作為索引結構,資料檔案是和(主鍵)索引綁在一起的(表資料檔案本身就是按b+tree組織的乙個索引結構),必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查找到主鍵,然後再通過主鍵查詢到資料。因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。

innodb不儲存表的具體行數,執行select count(*) from table時需要全表掃瞄。而myisam用乙個變數儲存了整個表的行數,執行上述語句時只需要讀出該變數即可,速度很快(注意不能加有任何where條件);

innodb不支援全文索引,而myisam支援全文索引,在涉及全文索引領域的查詢效率上myisam速度更快高;ps:5.7以後的innodb支援全文索引了

myisam**可以被壓縮後進行查詢操作

innodb支援表、行(預設)級鎖,而myisam支援表級鎖

innodb表必須有主鍵(使用者沒有指定的話會自己找或生產乙個主鍵),而myisam可以沒有

innodb儲存檔案有frm、ibd,而myisam是frm、myd、myi

innodb:frm是表定義檔案,ibd是資料檔案

myisam:frm是表定義檔案,myd是資料檔案,myi是索引檔案

詳細:

MySQL中MyISAM與InnoDB區別

mysql中myisam與innodb區別 myisam innodb 事物處理 不支援支援 外來鍵不支援 支援行鎖 不支援支援 全文索引 支援不支援 表的具體行數 儲存表的具體行數 掃瞄表來計算行數 delete表時 先drop表,然後重建表 一行一行的刪除 索引和資料 分開的,並且索引是有壓縮的...

MySQL中MyISAM與InnoDB區別及選擇

innodb 支援事務處理等 不加鎖讀取 支援外來鍵 支援行鎖 不支援fulltext型別的索引 不儲存表的具體行數,掃瞄表來計算有多少行 delete 表時,是一行一行的刪除 innodb 把資料和索引存放在表空間裡面 跨平台可直接拷貝使用 innodb中必須包含auto increment型別欄...

MySQL中MyISAM與InnoDB區別及選擇

支援事務處理等 不加鎖讀取 支援外來鍵 支援行鎖 不支援fulltext型別的索引 不儲存表的具體行數,掃瞄表來計算有多少行 delete 表時,是一行一行的刪除 innodb 把資料和索引存放在表空間裡面 跨平台可直接拷貝使用 innodb中必須包含auto increment型別欄位的索引 很難...