淺談MySQL表類型

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創建比較小的只讀表,而不會在使用智能壓縮時導致任何大的性能開銷。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章