MyISAM 和 INNODB的區別

2021-10-04 22:07:46 字數 1303 閱讀 5441

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

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

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

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

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

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

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

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

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

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

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

1. 是否要支援事務,如果要請選擇innodb,如果不需要可以考慮myisam;

2. 如果表中絕大多數都只是讀查詢,可以考慮myisam,如果既有讀也有寫,請使用innodb。

3. 系統奔潰後,myisam恢復起來更困難,能否接受;

4. mysql5.5版本開始innodb已經成為mysql的預設引擎(之前是myisam),說明其優勢是有目共睹的,如果你不知道用什麼,那就用innodb,至少不會差。

innodb為什麼推薦使用自增id作為主鍵?

答:自增id可以保證每次插入時b+索引是從右邊擴充套件的,可以避免b+樹和頻繁合併和**(對比使用uuid)。如果使用字串主鍵和隨機主鍵,會使得資料隨機插入,效率比較差。
innodb引擎的4大特性

插入緩衝(insert buffer),二次寫(double write),自適應雜湊索引(ahi),預讀(read ahead)

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型別欄位的索引 很難...