mysql表的类型_浅谈MySQL表类型
MySQL為我們提供了很多表類型供選擇,有MyISAM、ISAM、HEAP、BerkeleyDB、InnoDB,MERGE表類型,蘿卜白菜各有所愛是不假,可是真正選擇何種表類型還是要看業(yè)務(wù)需要啊,每一種表類型都有其自己的屬性和優(yōu)點。下面我們來簡單的討論一下。
MyISAM表類型:
MyISAM表(TYPE=MYISAM)是ISAM類型的一種延伸,具有很多優(yōu)化和增強的特性。
是MySQL的默認表類型。
MyISAM優(yōu)化了壓縮比例和速度,并且可以很方便的在不同的操作系統(tǒng)和平臺之間進行移植。
MyISAM支持大表文件(大于4G)
允許對BLOB和TEXT列進行索引
支持使用鍵前綴和使用完整的鍵搜索記錄
表數(shù)據(jù)和表索引文件可以依存在不同的位置,甚至是不同的文件系統(tǒng)中。
即使是具有相當多的插入、更新和刪除操作的表,智能防碎片邏輯也能保證其高性能的協(xié)作性。
ISAM表類型:
ISAM表(TYPE=ISAM)和MyISAM表相似,但是其沒有MyISAM格式的很多增強性能,因而不能像MyISAM類型那樣提供很好的優(yōu)化和執(zhí)行效率。因為ISAM索引不能被壓縮,它比在MyISAM中的相同索引戰(zhàn)勝較少的系統(tǒng)資源。ISAM索引需要較多的磁盤空間,這對于像本站的這種小型環(huán)境很是問題。呵呵。
和MyISAM一樣,ISAM表可以是固定長度的,也可以是可變長度的,但是其格式的最大鍵長度比較小,ISAM格式處理的表不能大于4G,而且表不能在不同的平臺間移植。另外,ISAM表容易分裂,這會降低查詢速度,對數(shù)據(jù)/索引的壓縮產(chǎn)生限制。
HELP表類型:
HEAP表(TYPE=HEAP)是內(nèi)存中的表,它使用能夠比較快速的散列索引(當運行INSERT查詢時,獨立評價指出HEAP表最少比MyISAM表快30%),因此,對于臨時表可以優(yōu)化。經(jīng)和MyISAM或ISAM表的訪問規(guī)則和使用方式一樣。存儲在里面的數(shù)據(jù)只在MySQL服務(wù)器的生命期內(nèi)存在,如果MySQL服務(wù)器崩潰或者被關(guān)掉,都會使其中的數(shù)據(jù)消失不見。雖然HEAP表具有性能方面的好處,但是由于它的臨時性和一些其他功能限制,在實際中不可能經(jīng)常使用。
HEAP表的大小只受到系統(tǒng)上可用內(nèi)存的限制,MySQL是很聰明的,其具有內(nèi)建保護來阻止無意識地使用所有可用內(nèi)存。所以我們不用擔心內(nèi)存會被HEAP表用盡。HEAP表不支持BLOB或TEXT列,不能超過max_heap_table_size變量指定的大小。
BerkeleyDB表類型:
BerkeleyDB表(TYPE=BDB)是為了滿足MySQL開發(fā)者對事務(wù)安全表日益增長的需求而發(fā)展起來的。BerkeleyDB表具有很多有趣的鵝,包括提交和回滾操作、多用戶并發(fā)訪問、檢查點、次要索引、通過日志恢復崩潰、連續(xù)地和鍵控地訪問數(shù)據(jù)等,這便利復雜的、基于事務(wù)的SQL有了可行的選擇。
不過BerkeleyDB表也有一些限制,讓我們簡單的了解一下:
它的移動比較困難(在創(chuàng)建時,表路徑硬編碼在表文件中)
不能壓縮表索引,而且其表通常比MyISAM相應(yīng)的表要大
有點雞肋的感覺,因為現(xiàn)在InnoDB格式很大程度上可以取代BerkeleyDB格式
InnoDB表類型:
InnoDB表(TYPE=INNODB),是一個完全兼容ACID(事務(wù)的原子性、一致性、獨立性及持久性)的、高效率的表完全支持MySQL的事務(wù)處理并且不會btwagkyaakftntce。精細的(行級和表級)鎖提高了MySQL事務(wù)處理的帶走度,同時其也支持無鎖定讀操作(以前只在Oracle中包含)和多版本的特性。
異步輸入/輸出和一系列的讀緩沖將提高數(shù)據(jù)檢索速度,同時可以進行文件的優(yōu)化和內(nèi)存的管理。需要的基礎(chǔ)上支持自動在內(nèi)存上創(chuàng)建散列索引來提高性能,使用緩沖來提高可靠性和數(shù)據(jù)庫操作的速度。InnoDB表的恨不能可以和MyISAM相媲美,甚至已經(jīng)超過了MyISAM。
在不同的操作系統(tǒng)和體系結(jié)構(gòu)上是完全可移植的。由于一直處于一致的狀態(tài)(MySQL通過在啟動時檢查錯誤并修復錯誤來使它們更加健壯)。對外鍵、提交、回滾和前滾的操作的支持,使其成為MySQL中最完善的表格式。
MERGE表類型:
MERGE表(TYPE=MERGE)是通過把多個MyISAM表組合到一個單獨的表來創(chuàng)建的一種虛擬表。
只有涉及到的表具有完全相同的表結(jié)構(gòu)時才能對表進行組合。字段類型或者索引的任何不同都不能進行成功的結(jié)合。
MERGE表使用組成表的索引,并且不能維持它本身的索引,在某種情況下可以提高速度。
允許SELECT,DELETE,UPDATE操作
在需要把不同表的數(shù)據(jù)放到一起提高連接的性能或者在一系列表中進行搜索時,這種表很實用。
處理大的MyISAM表時,我們可以通過壓紋或者使用MySQL發(fā)布中包含的myisampack實用工具進行“打包”來減少這些表戰(zhàn)勝的空間。myisampack創(chuàng)建比較小的只讀表,而不會在使用智能壓縮時導致任何大的性能開銷。
?
?
?
?
?
?
?
?
mysql表類型MyISAM和InnoDB區(qū)別
MyISAM:這個是默認類型,它是基于傳統(tǒng)的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標準方法.與其他存儲引擎比較,MyISAM具有檢查和修復表格的大多數(shù)工具. MyISAM表格可以被壓縮,而且它們支持全文搜索.它們不是事務(wù)安全的,而且也不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執(zhí)行大量的SELECT,MyISAM是更好的選擇。
InnoDB:這種類型是事務(wù)安全的.它與BDB類型具有相同的特性,它們還支持外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性,因此如果需要一個事務(wù)安全的存儲引擎,建議使用它.如果你的數(shù)據(jù)執(zhí)行大量的INSERT或UPDATE,出于性能方面的考慮,應(yīng)該使用InnoDB表,
對于支持事物的InnoDB類型的標,影響速度的主要原因是AUTOCOMMIT默認設(shè)置是打開的,而且程序沒有顯式調(diào)用BEGIN 開始事務(wù),導致每插入一條都自動Commit,嚴重影響了速度??梢栽趫?zhí)行sql前調(diào)用begin,多條sql形成一個事物(即使autocommit打開也可以),將大大提高性能。
1. 4.0以上mysqld都支持事務(wù),包括非max版本。3.23的需要max版本mysqld才能支持事務(wù)。
2. 創(chuàng)建表時如果不指定type則默認為myisam,不支持事務(wù)。
可以用 show create table tablename 命令看表的類型。
2.1 對不支持事務(wù)的表做start/commit操作沒有任何效果,在執(zhí)行commit前已經(jīng)提交,測試:
執(zhí)行一個msyql:
代碼
usetest;droptableifexiststn;createtabletn?(avarchar(10))?type=myisam;droptableifexiststy;createtablety?(avarchar(10))?type=innodb;begin;insertintotnvalues(’a');
insert?into?ty?values(’a');select*fromtn;select*fromty;
都能看到一條記錄
執(zhí)行另一個mysql:
usetest;select*fromtn;select*fromty;
只有tn能看到一條記錄
然后在另一邊
commit;
才都能看到記錄。
3. 可以執(zhí)行以下命令來切換非事務(wù)表到事務(wù)(數(shù)據(jù)不會丟失),innodb表比myisam表更安全:
altertabletablename?type=innodb;
3.1 innodb表不能用repair table命令和myisamchk -r table_name
但可以用check table,以及mysqlcheck [OPTIONS] database [tables]
4. 啟動mysql數(shù)據(jù)庫的命令行中添加了以下參數(shù)可以使新發(fā)布的mysql數(shù)據(jù)表都默認為使用事務(wù)(
只影響到create語句。)
–default-table-type=InnoDB
測試命令:
usetest;droptableifexiststn;createtabletn?(avarchar(10));
showcreatetabletn;
5. 臨時改變默認表類型可以用:
settable_type=InnoDB;
show?variableslike‘table_type’;
或:
c:mysqlbinmysqld-max-nt?–standalone?–default-table-type=InnoDB
?
?
?
?
?
?
?
?
康盛產(chǎn)品 數(shù)據(jù)庫 及 數(shù)據(jù)表 字符集
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的mysql表的类型_浅谈MySQL表类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 证券交易所的主要职能
- 下一篇: 信用卡多久不还上征信