国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql存儲(chǔ)引擎之------MyISAM

2024-07-24 12:40:02
字體:
供稿:網(wǎng)友
MyISAM是默認(rèn)存儲(chǔ)引擎。它基于更老的ISAM代碼,但有很多有用的擴(kuò)展。(注意MySQL 5.1不支持ISAM)。

每個(gè)MyISAM在磁盤上存儲(chǔ)成三個(gè)文件。第一個(gè)文件的名字以表的名字開始,擴(kuò)展名指出文件類型。.frm文件存儲(chǔ)表定義。數(shù)據(jù)文件的擴(kuò)展名為.MYD (MYData)。索引文件的擴(kuò)展名是.MYI (MYIndex)。

要明確表示你想要用一個(gè)MyISAM表格,請(qǐng)用ENGINE表選項(xiàng)指出來:

CREATE TABLE t (i INT) ENGINE = MYISAM;
注釋:老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM)。MySQL 5.1為向下兼容而支持這個(gè)語法,但TYPE現(xiàn)在被輕視,而ENGINE是首先的用法。

一般地,ENGINE選項(xiàng)是不必要的;除非默認(rèn)已經(jīng)被改變了,MyISAM是默認(rèn)存儲(chǔ)引擎。

如下是MyISAM存儲(chǔ)引擎的一些特征:

?         所有數(shù)據(jù)值先存儲(chǔ)低字節(jié)。這使得數(shù)據(jù)機(jī)和操作系統(tǒng)分離。二進(jìn)制輕便性的唯一要求是機(jī)器使用補(bǔ)碼(如最近20年的機(jī)器有的一樣)和IEEE浮點(diǎn)格式(在主流機(jī)器中也完全是主導(dǎo)的)。唯一不支持二進(jìn)制兼容性的機(jī)器是嵌入式系統(tǒng)。這些系統(tǒng)有時(shí)使用特殊的處理器。

先存儲(chǔ)數(shù)據(jù)低字節(jié)并不嚴(yán)重地影響速度;數(shù)據(jù)行中的字節(jié)一般是未聯(lián)合的,從一個(gè)方向讀未聯(lián)合的字節(jié)并不比從反向讀更占用更多的資源。服務(wù)器上的獲取列值的代碼與其它代碼相比并不顯得時(shí)間緊。

?        大文件(達(dá)63位文件長(zhǎng)度)在支持大文件的文件系統(tǒng)和操作系統(tǒng)上被支持。

?         當(dāng)把刪除和更新及插入混合的時(shí)候,動(dòng)態(tài)尺寸的行更少碎片。這要通過合并相鄰被刪除的塊,以及若下一個(gè)塊被刪除,就擴(kuò)展到下一塊來自動(dòng)完成。

?         每個(gè)MyISAM表最大索引數(shù)是64。 這可以通過重新編譯來改變。每個(gè)索引最大的列數(shù)是16個(gè)。

?         最大的鍵長(zhǎng)度是1000字節(jié)。這也可以通過編譯來改變。對(duì)于鍵長(zhǎng)度超過250字節(jié)的情況,一個(gè)超過1024字節(jié)的的鍵塊被用上。

?         BLOB和TEXT列可以被索引。

?         NULL值被允許在索引的列中。這個(gè)占每個(gè)鍵的0-1個(gè)字節(jié)。

?         所有數(shù)字鍵值以高字節(jié)為先被存儲(chǔ)以允許一個(gè)更高地索引壓縮。

?        當(dāng)記錄以排好序的順序插入(就像你使用一個(gè)AUTO_INCREMENT列之時(shí)),索引樹被劈開以便高節(jié)點(diǎn)僅包含一個(gè)鍵。這改善了索引樹的空間利用率。

?         每表一個(gè)AUTO_INCREMEN列的內(nèi)部處理。MyISAM為INSERT和UPDATE操作自動(dòng)更新這一列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂?shù)闹当粍h除之后就不能再利用。(當(dāng)AUTO_INCREMENT列被定義為多列索引的最后一列,可以出現(xiàn)重使用從序列頂部刪除的值的情況)。AUTO_INCREMENT值可用ALTER TABLE或myisamch來重置。

?         如果數(shù)據(jù)文件中間的表沒有自由塊了,在其它線程從表讀的同時(shí),你可以INSERT新行到表中。(這被認(rèn)識(shí)為并發(fā)操作)。自由塊的出現(xiàn)是作為刪除行的結(jié)果,或者是用比當(dāng)前內(nèi)容多的數(shù)據(jù)對(duì)動(dòng)態(tài)長(zhǎng)度行更新的結(jié)果。當(dāng)所有自由塊被用完(填滿),未來的插入又變成并發(fā)。

?         你可以把數(shù)據(jù)文件和索引文件放在不同目錄,用DATA DIRECTORY和INDEX DIRECTORY選項(xiàng)CREATE TABLE以獲得更高的速度。

?         每個(gè)字符列可以又不同的字符集。

?         在MyISAM索引文件里又一個(gè)標(biāo)志,它表明表是否被正確關(guān)閉。如果用--myisam-recover選項(xiàng)啟動(dòng)mysqld,MyISAM表在打開得時(shí)候被自動(dòng)檢查,如果被表被不恰當(dāng)?shù)仃P(guān)閉,就修復(fù)表。

?         如果你用--update-state選項(xiàng)運(yùn)行myisamchk,它標(biāo)注表為已檢查。myisamchk --fast只檢查那些沒有這個(gè)標(biāo)志的表。

?         myisamchk --analyze為部分鍵存儲(chǔ)統(tǒng)計(jì)信息,也為整個(gè)鍵存儲(chǔ)統(tǒng)計(jì)信息。

?         myisampack可以打包BLOB和VARCHAR列。

MyISAM也支持下列特征:

?         支持true VARCHAR類型;VARCHAR列以存儲(chǔ)在2個(gè)字節(jié)中的長(zhǎng)度來開始。

?         有VARCHAR的表可以有固定或動(dòng)態(tài)記錄長(zhǎng)度。

?         VARCHAR和CHAR列可以多達(dá)64KB。

?         一個(gè)被搞亂的已計(jì)算索引對(duì)可對(duì)UNIQUE來使用。這允許你在表內(nèi)任何列的合并上有UNIQUE。(盡管如此,你不能在一個(gè)UNIQUE已計(jì)算索引上搜索)。

MyISAM表的存儲(chǔ)格式

靜態(tài)格式是MyISAM表的默認(rèn)存儲(chǔ)格式。當(dāng)表不包含變量長(zhǎng)度列(VARCHAR, BLOB, 或TEXT)時(shí),使用這個(gè)格式。每一行用固定字節(jié)數(shù)存儲(chǔ)。

MyISAM的三種存儲(chǔ)格式中,靜態(tài)格式就最簡(jiǎn)單也是最安全的(至少對(duì)于崩潰而言)。靜態(tài)格式也是最快的on-disk格式。快速來自于數(shù)據(jù)文件中的行在磁盤上被找到的容易方式:當(dāng)按照索引中的行號(hào)查找一個(gè)行時(shí),用行長(zhǎng)度乘以行號(hào)。同樣,當(dāng)掃描一個(gè)表的時(shí)候,很容易用每個(gè)磁盤讀操作讀一定數(shù)量的記錄。

當(dāng)MySQL服務(wù)器正往一個(gè)固定格式MyISAM文件寫的時(shí)候,如果計(jì)算機(jī)崩潰了,安全是顯然的。在這種情況下,myisamchk可以容易地決定每行從哪里開始到哪里結(jié)束,所以它通常可以收回所有記錄,除了寫了一部分的記錄。注意,基于數(shù)據(jù)行,MyISAM表索引可以一直被重新構(gòu)建。

靜態(tài)格式表的一般特征:

?         CHAR列對(duì)列寬度是空間填補(bǔ)的。

?         非常快。

?         容易緩存。

?         崩潰后容易重建,因?yàn)橛涗浳挥诠潭ㄎ恢谩?

?         重新組織是不必要的,除非你刪除巨量的記錄并且希望為操作系統(tǒng)騰出磁盤空間。為此,可使用OPTIMIZE TABLE或者myisamchk -r。

?         通常比動(dòng)態(tài)格式表需要更多的磁盤空間。

動(dòng)態(tài)表特征

如果一個(gè)MyISAM表包含任何可變長(zhǎng)度列(VARCHAR, BLOB或TEXTDynamic),或者如果一個(gè)表被用ROW_FORMAT=DYNAMIC選項(xiàng)來創(chuàng)建,動(dòng)態(tài)存儲(chǔ)格式被使用。

這個(gè)格式更為復(fù)雜一點(diǎn),因?yàn)槊啃杏幸粋€(gè)表明行有多長(zhǎng)的頭。當(dāng)一個(gè)記錄因?yàn)楦碌慕Y(jié)果被變得更長(zhǎng),該記錄也可以在超過一個(gè)位置處結(jié)束。

你可以使用OPTIMIZE TABLE或myisamchk來對(duì)一個(gè)表整理碎片。如果在一個(gè)表中有你頻繁訪問或改變的固定長(zhǎng)度列,表中也有一些可變長(zhǎng)度列,僅為避免碎片而把這些可變長(zhǎng)度列移到其它表可能是一個(gè)好主意。

動(dòng)態(tài)格式表的一般特征:

?         除了長(zhǎng)度少于4的列外,所有的字符串列是動(dòng)態(tài)的。

?         在每個(gè)記錄前面是一個(gè)位圖,該位圖表明哪一列包含空字符串(對(duì)于字符串列)或者0(對(duì)于數(shù)字列)。注意,這并不包括包含NULL值的列。如果一個(gè)字符列在拖曳空間移除后長(zhǎng)度為零,或者一個(gè)數(shù)字列為零值,這都在位圖中標(biāo)注了且列不被保存到磁盤。 非空字符串被存為一個(gè)長(zhǎng)度字節(jié)加字符串的內(nèi)容。

?         通常比固定長(zhǎng)度表需要更少的磁盤空間。

?         每個(gè)記錄僅使用必需大小的空間。盡管如此,如果一個(gè)記錄變大,它就按需要被分開成多片,造成記錄碎片的后果。比如,你用擴(kuò)展行長(zhǎng)度的信息更新一行,該行就變得有碎片。在這種情況下,你可以時(shí)不時(shí)運(yùn)行OPTIMIZE TABLE或myisamchk -r來改善性能。可使用myisamchk -ei來獲取表的統(tǒng)計(jì)數(shù)據(jù)。

?         動(dòng)態(tài)格式表在崩潰后要比靜態(tài)格式表更難重建,因?yàn)橐粋€(gè)記錄可能被分為多個(gè)碎片且鏈接(碎片)可能被丟失。

已壓縮表特征

已壓縮存儲(chǔ)格式是由myisampack工具創(chuàng)建的只讀格式。

所有MySQL分發(fā)版里都默認(rèn)包括myisampack。已壓縮表可以用myisamchk來解壓縮。

已壓縮表有下列特征:

?         已壓縮表占據(jù)非常小的磁盤空間。這最小化了磁盤用量,當(dāng)使用緩慢的磁盤(如CD-ROM)之時(shí),這是很有用的。

?         每個(gè)記錄是被單獨(dú)壓縮的,所以只有非常小的訪問開支。依據(jù)表中最大的記錄,一個(gè)記錄的頭在每個(gè)表中占據(jù)1到3個(gè)字節(jié)。每個(gè)列被不同地壓縮。通常每個(gè)列有一個(gè)不同的Huffman樹。一些壓縮類型如下:

o        后綴空間壓縮。

-        前綴空間壓縮。

-        零值的數(shù)用一個(gè)位來存儲(chǔ)。

-        如果在一個(gè)整型列中的值有一個(gè)小的范圍,列被用最小可能的類型來存儲(chǔ)。比如,一個(gè)BIGINT列(8字節(jié)),如果所有它的值在-128到127范圍內(nèi),它可以被存儲(chǔ)為TINYINT列(1字節(jié))

-        如果一個(gè)列僅有一小組可能的值,列的類型被轉(zhuǎn)化成ENUM。

-        一個(gè)列可以使用先前壓縮類型的任意合并。

?         可以處理固定長(zhǎng)度或動(dòng)態(tài)長(zhǎng)度記錄。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 塔城市| 蒙山县| 木兰县| 绥德县| 塘沽区| 乐陵市| 延边| 互助| 宜章县| 阳城县| 永嘉县| 出国| 哈巴河县| 苗栗市| 青海省| 昆明市| 兴宁市| 望奎县| 淳安县| 湟源县| 萝北县| 新野县| 天祝| 岳普湖县| 南通市| 靖安县| 沁阳市| 蓝山县| 信阳市| 高尔夫| 息烽县| 南澳县| 鄂托克旗| 长阳| 江西省| 巴马| 宜兰市| 南皮县| 金华市| 连云港市| 河南省|