MySQL之動態表特徵

2021-05-11 02:12:41 字數 1303 閱讀 5170

如果乙個

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的實際內容沒...