資源描述:
《mysql之myisam存儲引擎》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、MyISAM存儲引擎每張表在磁盤上的存儲分為三個(gè)文件:存放元數(shù)據(jù)的.frm文件,存放表記錄數(shù)據(jù)的.MYD文件,存放索引數(shù)據(jù)的.MYI為索引文件。MyISAM的一些特點(diǎn)·只對索引進(jìn)行緩存(KeyCache),數(shù)據(jù)文件使用操作系統(tǒng)cache,當(dāng)索引數(shù)據(jù)大于分配的keybuffer時(shí)也使用操作系統(tǒng)cache索引·單獨(dú)保存表的行數(shù),因此做count(*)時(shí)不需要全表掃描·不是事務(wù)安全的,不支持外鍵·表級鎖定·每張表一個(gè)數(shù)據(jù)文件,備份時(shí)可以直接復(fù)制,恢復(fù)時(shí)也可以直接覆蓋,操作方便·使用myisamchk進(jìn)行故障恢復(fù)MyISAM啟動以下為啟動選項(xiàng)--m
2、yisam-recover-option=mode設(shè)置MyISAM表損壞后自動恢復(fù)的模式--delay-key-write=ALL不在MyISAM表寫操作之間刷新keycachekey_buffer_sizeKeycache的大小以下系統(tǒng)變量影響MyISAM表bulk_insert_buffer_size用于優(yōu)化批量插入操作的樹緩沖區(qū)大小myisam_max_sort_file_sizeMySQL在重建MyISAM索引時(shí)(REPAIRTABLE、ALTERTABLE、LOADDATAINFILE)可以使用的臨時(shí)文件最大容量。如果需要的文件大
3、小超過此值,索引會在keycache中創(chuàng)建,相比而言速度較慢myisam_sort_buffer_size設(shè)置用于表恢復(fù)的緩沖區(qū)大小MyISAM表的存儲格式MyISAM支持三種不同的存儲格式:靜態(tài)固定長度、動態(tài)可變長度和壓縮格式。前兩者根據(jù)列的數(shù)據(jù)類型自動選擇。壓縮格式只能通過myisampack工具創(chuàng)建。當(dāng)使用CREATETABLE或ALTERTABLE操作不包含BLOB、TEXT列時(shí),ROW_FORMAT選項(xiàng)強(qiáng)制設(shè)置存儲格式(FIXED、DYNAMIC)。靜態(tài)固定長度:·CHAR和VARCHAR自動用空格填充,BINARY和VARBIN
4、ARY以0x00填充?!た焖?,因?yàn)閿?shù)據(jù)文件中的行可以用簡單的方法找到:用行長度乘以行號?!と菀拙彺妗け罎⒑笕菀字亟?,因?yàn)樾械奈恢霉潭ā!げ恍枰匦陆M織,除非刪除了大量的記錄,想為操作系統(tǒng)騰出磁盤空間。可以使用OPTIMIZETABLE或myisamchk-r完成?!ねǔ1葎討B(tài)格式花費(fèi)更多的空間。動態(tài)可變長度:·字符型的列長度可變,除了長度小于4的·每行首部存在一個(gè)位圖,用于記錄哪些列包含空字符串(對于字符型)或0(對于數(shù)字型)。注意這里不包括NULL。空串和0為被標(biāo)記在位圖中而不存儲在磁盤。非空字符串保存它的長度和實(shí)際內(nèi)容(即保存實(shí)際長度+
5、1)?!ねǔ1褥o態(tài)固定格式花費(fèi)較少的空間?!と绻凶兊暮艽螅瑫λM(jìn)行分片,導(dǎo)致行碎片。OPTIMIZETABLE或myisamchk-r可以用來改善性能。myisamchk-ei獲取表的統(tǒng)計(jì)信息?!け罎r(shí)比靜態(tài)格式的恢復(fù)困難,因?yàn)樾锌赡鼙环譃樗槠槠逆溄右部赡苁?。壓縮表:·花費(fèi)非常少的磁盤空間,這對于低速存儲器(如CD-ROMs)很有幫助?!っ啃袉为?dú)地壓縮,因此訪問開銷小。根據(jù)行的大小,每行的頭部占1到3個(gè)字節(jié)不等。·每列壓縮也不同,通常每列都具有不同的哈夫曼樹,以下為一些常見的壓縮類型:1、后綴空格壓縮2、前綴空格壓縮3、0值用1
6、位(bit)來存儲4、整型數(shù)值如果都分布在一小范圍中,則該列存儲使用更小的類型。比如BIGINT(8字節(jié))列中的值都分布在-128至127內(nèi),可以TINYINT(1字節(jié))存儲。5、列只有某幾種可能的值,轉(zhuǎn)換為ENUM類型6、以上各種壓縮類型都可任意結(jié)合·可以處理固定長度或動態(tài)長度記錄MyISAM表的問題當(dāng)以下事件發(fā)生時(shí),可能導(dǎo)致表損壞:·mysqld進(jìn)程在寫過程中被kill·不可意料的主機(jī)Crash·硬件故障·當(dāng)服務(wù)器正在修改表時(shí),使用外部程序(如myisamchk)修改表·MySQL或MyISAM代碼存在的Bug不正確的關(guān)閉表:每個(gè)MyI
7、SAM索引文件(.MYI)在首部有一個(gè)計(jì)數(shù)器用來驗(yàn)證表是否正確關(guān)閉。當(dāng)使用CHECKTABLE或myisamchk出現(xiàn)以下提示時(shí)表明計(jì)數(shù)器目前不同步:clientsareusingorhaven'tclosedthetableproperly