mysql在建立表的時候定義表的性質,共有三種:靜態表,動態表,壓縮表。預設是靜態表,如果存在varchar、blob、text欄位,表型別就是動態了。
1.靜態表:
欄位有固定長度,例如:char(20)。如果使用gbk字符集儲存中文username,將占用40byte,如果username的實際內容沒有達到40byte,將會填充空格,以達到40byte。速度很快,因為mysql知道username總是從第41個位元組開始,容易快取,出現問題後也容易恢復(mysql知道記錄的確切位置),需要更多的硬碟空間(如果有三個上面的字段,一條記錄就會佔120位元組,即使實際只用了其中一部分)
2.動態表:
字段不定長(變長),這種**式比較節省空間,但是複雜度更高,每條記錄都有乙個header,作用就是表明該記錄有多長,所有的字串列都是動態的(除非小於4個位元組,這種情況下,節省的空間可以忽略不計,增加的複雜度會反而會導致效能丟失),通常占用比靜態表少的多地空間,但是必須經常維護(避免碎片),例如:更新了使用者名稱somebody為somebodyt,t不能立刻就出現在y的後面,因為空間被其他記錄占用,對於出現碎片的列,每個新連線會損失6個位元組。而且出現問題後不容易重建(前面我說的靜態表正好相反),如果碎片嚴重,有可能出現庫**(^_^).
不包括連線的動態記錄的空間消耗可以用下面的公式計算:
3+(列數+7)/8+(字元列數)+數字列的打包尺寸+字串長度+(空列的數量+7)/8
每條記錄的header可以表明那個字串列是空的,那個數字列包含0(非空),在那種情況下不向磁碟儲存,非空字串包含乙個長度位元組加上字串內容。
壓縮表:
唯讀,使用很少的空間,用myisampack工具建立,表要少得多,每條記錄分開壓縮,所以不能同時訪問,可以壓縮靜態表和動態表。
建立方法:myisampack [options] filename
你大體上可以看出來,具體的計算空間不容易,只要根據不同的表特點擊擇資料庫就可以了。
mysql 表 型別 mysql 表的型別
mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction safe bdb全...
mysql 表 型別 mysql表型別
mysql支援6種不同的表型別 bdb innodb heap isam merge以及myisam。其中 bdb,innodb單獨屬於一類,稱為 事務安全型 transaction safe 其餘的表型別屬於第二類,稱為 非事務安全型 non transaction safe 事務安全型 bdbb...
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...