標籤:儲存 預設 控制 返回 開始 無法 定址 方案 trunc
MySQL預設採用的是MyISAM。
1,交易處理
innodb 支援事務功能,myisam 不支援。
Myisam 的執行速度更快,效能更好。
MyISAM不支援事務,而InnoDB支援。InnoDB的AUTOCOMMIT預設是開啟的,即每條SQL語句會預設被封裝成一個事務,自動認可,這樣會影響速度,所以最好是把多條SQL語句顯示放在begin和commit之間,組成一個事務去提交。
2,select ,update ,insert ,delete 操作
MyISAM:如果執行大量的SELECT,MyISAM是更好的選擇。
InnoDB:如果你的資料執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表。DELETE 從效能上InnoDB更優,但DELETE FROM table時,InnoDB不會重建立立表,而是一行一行的刪除,在innodb上如果要清空儲存有大量資料的表,最好使用truncate table這個命令。
3,鎖機制不同
InnoDB 為行級鎖,myisam 為表級鎖。
注意:當資料庫無法確定,所找的行時,也會變為鎖定整個表。
如: update table set num = 10 where username like "%test%";
4,查詢表的行數不同
MyISAM:select count() from table,MyISAM只要簡單的讀出儲存好的行數,注意的是,當count()語句包含 where條件時,兩種表的操作是一樣的
InnoDB : InnoDB 中不儲存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行
沒有where的count()使用MyISAM要比InnoDB快得多。因為MyISAM內建了一個計數器,count()時它直接從計數器中讀,而InnoDB必須掃描全表。所以在InnoDB上執行count()時一般要伴隨where,且where中要包含主鍵以外的索引列。為什麼這裡特彆強調“主鍵以外”?因為InnoDB中primary index是和raw data存放在一起的,而secondary index則是單獨存放,然後有個指標指向primary key。所以只是count()的話使用secondary index掃描更快,而primary key則主要在掃描索引同時要返回raw data時的作用較大。
5,物理結構不同
MyISAM :每個MyISAM在磁碟上儲存成三個檔案。第一個檔案的名字以表的名字開始,副檔名指出檔案類型。
.frm檔案儲存體表定義。
資料檔案的副檔名為.MYD (MYData)。
索引檔案的副檔名是.MYI (MYIndex)
InnoDB:基於磁碟的資源是InnoDB資料表空間資料檔案和它的記錄檔,InnoDB 表的大小隻受限於作業系統檔案的大小,一般為 2GB
6、儲存空間
MyISAM:可被壓縮,儲存空間較小。支援三種不同的儲存格式:靜態表(預設,但是注意資料末尾不能有空格,會被去掉)、動態表、壓縮表。
InnoDB:需要更多的記憶體和儲存,它會在主記憶體中建立其專用的緩衝池用於高速緩衝資料和索引。
6,anto_increment 機制不同
更好和更快的auto_increment處理
7, 索引
全文索引是指對char、varchar和text中的每個詞(停用詞除外)建立倒排序索引。MyISAM的全文索引其實沒啥用,因為它不支援中文分詞,必須由使用者分詞後加入空格再寫到資料表裡,而且少於4個漢字的詞會和停用詞一樣被忽略掉。
InnoDB支援外鍵,MyISAM不支援。
MyISAM:支援 FULLTEXT類型的全文索引
InnoDB:不支援FULLTEXT類型的全文索引,但是innodb可以使用sphinx外掛程式支援全文索引,並且效果更好。
8, 其他:為什麼MyISAM會比Innodb 的查詢速度快。
INNODB在做SELECT的時候,要維護的東西比MYISAM引擎多很多;
1)資料區塊,INNODB要緩衝,MYISAM只緩衝索引塊, 這中間還有換進換出的減少;
2)innodb定址要映射到塊,再到行,MYISAM 記錄的直接是檔案的OFFSET,定位比INNODB要快
3)INNODB還需要維護MVCC一致;雖然你的情境沒有,但他還是需要去檢查和維護
MVCC ( Multi-Version Concurrency Control )多版本並發控制
9、 可移植性、備份及恢複
MyISAM:資料是以檔案的形式儲存,所以在跨平台的資料轉移中會很方便。在備份和恢複時可單獨針對某個表進行操作。
InnoDB:免費的方案可以是拷貝資料檔案、備份 binlog,或者用 mysqldump,在資料量達到幾十G的時候就相對痛苦了。
Mysql 儲存引擎 InnoDB與Myisam的主要區別