1. 程式人生 > >MySQL如何選擇表型別,MyISAM還是InnoDB?

MySQL如何選擇表型別,MyISAM還是InnoDB?

        MySQL支援MyISAM,InnoDB,HEAP,BOB,ARCHIVE,CSV等多種資料表型別,在建立一個新MySQL資料表時,可以為它設定一個型別,其中最重要的有MyISAM,InnoDB兩種表

型別,它們各有自己的特性.如果在建立一個數據表時沒有設定其型別,MySQL伺服器將會根據它的具體配置情況在MyISAM和InnoDB兩個型別之間選擇.預設的資料表型別,由

MySQL配置檔案裡的default-table-type選項指定,當用CREATE TABLE命令建立一個新資料表時,可以通過ENGINE或TYPE選項決定資料表型別.

MyISAM資料表

        MyISAM資料表型別的特點是成熟,穩定和易於管理.它使用一種表格鎖定的機制,來優化多個併發的讀/寫操作.其代價是你需要經常執行OPTIMIZE TABLE命令,來恢復被更新

機制所浪費的空間.MyISAM還有一些有用的擴充套件,例如,用來修復資料庫檔案的MyISAMChk工具和用來恢復浪費的空間的MyISAMPACK工具.MyISAM強調了快速讀取操作,這可能

就是為什麼MySQL受到Web開發人員如此青睞的主要原因.在Web開發中你所進行的大量資料操作都是讀取操作,所以,大多數虛擬主機提供商和Internet平臺提供商只允許使用

MyISAM格式.雖然MyISAM表型別是一種比較成熟穩定的表型別,但是MyISAM對一些功能不支援.

InnoDB資料表

可以把InnoDB看做是MyISAM的一種更新換代產品.InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全儲存引擎.InnoDB也支援外來鍵(FOREIGN KEY)機制.在

SQL查詢中,你可以自由的將InnoDB型別的表與其他MySQL的表的型別混合起來,甚至在同一個查詢中也可以混合.InnoDB資料表也有缺點,否則使用者肯定只使用它而不去使用

MyISAM資料表型別.例如,InnoDB資料表的空間佔用量要比同樣內容的MyISAM資料表大很多,另外,這種表型別也不支援全文索引等.

如何選擇:

MyISAM資料表和InnoDB資料表可以同時存在於同一個資料庫裡,也就是可以把資料庫裡的不同資料表設定為不同型別.這樣,使用者就可以根據每一個數據表的內容資料和具

體用途分別為它們選擇最佳的資料表型別.下面是兩個表的簡單對比:

表型別功能對比 MyISAM表 InnoDB表
事務處理 不支援 支援
資料行鎖定 不支援,只有表鎖定 支援
外來鍵約束 不支援 支援
表空間大小 相對小 相對大,最大是2倍
全文索引 支援 不支援
COUNT問題 執行COUNT(*)查詢時,速度慢

如果希望以最節約空間和時間或者響應速度快的方式來管理資料表,MyISAM資料表就應該是首選.如果應用程式需要用到事務,使用外來鍵或需要更高的安全性,以及需要允許

很多使用者同時修改某個資料表裡的資料,則InnoDB資料表更值得考慮.當你需要建立一個新表時,可以通過新增一個ENGINE或TYPE選項到CREATE TABLE語句來告訴MySQL你

要建立什麼型別的表:

CREATE TABLE t(i INT) ENGINE=INNODB;

CREATE TABLE t(i INT) TYPE=MYISAM;