MySQL為我們提供了很多表類型供選擇,有MyISAM、ISAM、HEAP、BerkeleyDB、InnoDB,MERGE表類型每一種表類型都有其自己的屬性和優點。下面我們來簡單的討論一下。
MyISAM表類型:
MyISAM
表(TYPE=MYISAM)是ISAM類型的一種延伸,具有很多最佳化和增強特性。是MySQL的預設表類型。MyISAM最佳化了壓縮比例和速度,並且
可以很方便的在不同的作業系統和平台之間進行移植。MyISAM支援大表檔案(大於4G)允許對BLOB和TEXT列進行索引支援使用鍵首碼和使用完整的
鍵搜尋記錄表資料和表索引檔案可以依存在不同的位置,甚至是不同的檔案系統中。即使是具有相當多的插入、更新和刪除操作的表,智能防片段邏輯也能保證其高
效能的協作性。
ISAM表類型:
ISAM表(TYPE=ISAM)和MyISAM表相似,但是其沒有MyISAM格式的很多增強效能,因而不能像MyISAM類型那樣提供很好的最佳化和執行效率。因為ISAM索引不能被壓縮
,它比在MyISAM中的相同索引戰勝較少的系統資源。ISAM索引需要較多的磁碟空間
,這對於像本站的這種小型環境很是問題。呵呵。
和MyISAM一樣,ISAM表可以是固定長度的,也可以是可變長度的,但是其格式的最大鍵長度比較小,ISAM格式處理的表不能大於4G,而且表不能在不同的平台間移植
。另外,ISAM表容易分裂,這會降低查詢速度,對資料/索引的壓縮產生限制
。
HELP表類型:
HEAP表(TYPE=HEAP)是記憶體中的表,它使用能夠比較快速的散列索引(當運行INSERT查詢時,獨立評價指出HEAP表最少比MyISAM錶快30%),因此,對於暫存資料表可以最佳化。經和MyISAM或ISAM表的訪問規則和使用方式一樣。儲存在裡面的資料只在MySQL伺服器的生命期記憶體在
,如果MySQL伺服器崩潰或者被關掉,都會使其中的資料消失不見。雖然HEAP表具有效能方面的好處,但是由於它的臨時性和一些其他功能限制,在實際中不可能經常使用。
HEAP表的大小隻受到系統上可用記憶體的限制,MySQL是很聰明的,其具有內建保護來阻止無意識地使用所有可用記憶體。所以我們不用擔心記憶體會被HEAP表用盡。HEAP表不支援BLOB或TEXT列,不能超過max_heap_table_size變數指定的大小。
BerkeleyDB表類型:
BerkeleyDB
表(TYPE=BDB)是為了滿足MySQL開發人員對事務安全表日益增長的需求而發展起來的。BerkeleyDB表具有很多有趣的鵝,包括提交和復原操
作、多使用者並發訪問、檢查點、次要索引、通過日誌恢複崩潰、連續地和鍵控地訪問資料等,這便利複雜的、基於事務的SQL有了可行的選擇。
不過BerkeleyDB表也有一些限制,讓我們簡單的瞭解一下:
它的移動比較困難(在建立時,表路徑寫入程式碼在表檔案中)不能壓縮表索引,而且其表通常比MyISAM相應的表要大有點雞肋的感覺,因為現在InnoDB格式很大程度上可以取代BerkeleyDB格式
InnoDB表類型:
InnoDB
表(TYPE=INNODB),是一個完全相容ACID(事務的原子性、一致性、獨立性及持久性)的、高效率的表完全支援MySQL的交易處理並且不會
btwagkyaakftntce。精細的(行級和表級)鎖提高了MySQL交易處理的帶走度,同時其也支援無鎖定讀操作(以前只在Oracle中包含)
和多版本的特性。
非同步輸入/輸出和一系列的讀緩衝將提高資料檢索速度,同時可以進行檔案的最佳化和記憶體的管理。需要的基礎上支援自動在記憶體上建立散列索引來提高效能,使用緩衝來提高可靠性和資料庫操作的速度。InnoDB表的恨不能可以和MyISAM相媲美,甚至已經超過了MyISAM。
在不同的作業系統和體繫結構上是完全可移植的。由於一直處於一致的狀態(MySQL通過在啟動時檢查錯誤並修複錯誤來使它們更加健壯)。對外鍵、提交、復原和前滾的操作的支援,使其成為MySQL中最完善的表格式
。
MERGE表類型:
MERGE
表(TYPE=MERGE)是通過把多個MyISAM表組合到一個單獨的表來建立的一種虛擬表。只有涉及到的表具有完全相同的表結構時才能對錶進行組合。
欄位類型或者索引的任何不同都不能進行成功的結合。MERGE表使用組成表的索引,並且不能維持它本身的索引,在某種情況下可以提高速度。允許
SELECT,DELETE,UPDATE操作在需要把不同表的資料放到一起提高串連的效能或者在一系列表中進行搜尋時,這種表很實用。處理大的
MyISAM表時,我們可以通過壓紋或者使用MySQL發布中包含的myisampack工具 + 生產力進行“打包”來減少這些表戰勝的空間。
myisampack建立比較小的唯讀表,而不會在使用智能壓縮時導致任何大的效能開銷。