如果乙個
myisam
表包含任何可變長度列(
varchar, blob
或textdynamic
),或者如果乙個表被用
row_format=dynamic
選項來建立,動態儲存格式被使用。
這個格式更為複雜一點,因為每行有乙個表明行有多長的頭。當乙個記錄因為更新的結果被變得更長,該記錄也可以在超過乙個位置處結束。
你可以使用
optimize table
或myisamchk
來對乙個表整理碎片。如果在乙個表中有你頻繁訪問或改變的固定長度列,表中也有一些可變長度列,僅為避免碎片而把這些可變長度列移到其它表可能是乙個好主意。
動態格式表的一般特徵:
·除了長度少於
4的列外,所有的字串列是動態的。
·在每個記錄前面是乙個位圖,該位圖表明哪一列包含空字串(對於字串列)或者
0(對於數字列)。注意,這並不包括包含
null
值的列。如果乙個字元列在拖曳空間移除後長度為零,或者乙個數字列為零值,這都在位圖中標註了且列不被儲存到磁碟。
非空字串被存為乙個長度位元組加字串的內容。 ·
通常比固定長度表需要更少的磁碟空間。 ·
每個記錄僅使用必需大小的空間。儘管如此,如果乙個記錄變大,它就按需要被分開成多片,造成記錄碎片的後果。比如,你用擴充套件行長度的資訊更新一行,該行就變得有碎片。在這種情況下,你可以時不時執行
optimize table
或myisamchk -r
來改善效能。可使用
myisamchk -ei
來獲取表的統計資料。 ·
動態格式表在崩潰後要比靜態格式表更難重建,因為乙個記錄可能被分為多個碎片且鏈結(碎片)可能被丟失。
·動態尺寸記錄期望的行長度用下列表示式來計算:·3
·+ (number of columns + 7) / 8
·+ (number of char columns)
·+ (packed size of numeric columns)
·+ (length of strings)
·+ (number of null columns + 7) / 8
對每個鏈結需要額外的
6位元組。在乙個更新導致乙個記錄的擴大之時,乙個動態記錄被鏈結了。每個新鏈結至少是
20位元組,所以下乙個擴大可能在同樣的鏈結裡進行。如果不是,則另乙個鏈結將被建立。你可以使用
myisamchk -ed
來找出鏈結的數目。所有的鏈結可以用
myisamchk -r
來移除。
mysql動態 建表 mysql動態表創設
mysql 動態表建立 mysql 動態表建立 首先要檢測是否存在。使用sql語句 1.show tables like tb bp d case 2.select table name from information schema tables where table schema dbname...
Mysql動態建表和臨時表
1.mysql採用儲存,實現動態建表 begin declare tb name varchar 64 declare v name varchar 32 default tbl test set tb name concat v name,date format curdate y m d set...
MYSQL表的型別 靜態表 動態表 壓縮表
mysql在建立表的時候定義表的性質,共有三種 靜態表,動態表,壓縮表。預設是靜態表,如果存在varchar blob text欄位,表型別就是動態了。1.靜態表 欄位有固定長度,例如 char 20 如果使用gbk字符集儲存中文username,將占用40byte,如果username的實際內容沒...