MYSQL靜態表、動態表、壓縮表以及兩個主要的存儲

MYSQL靜態表、動態表、壓縮表以及兩個主要的存儲

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

你大體上可以看出來,具體的計算空間不容易,只要根據不同的表特點選擇數據庫就可以了。

InnoDB 和MyISAM是在使用MySQL最常用的兩個表類型,各有優缺點,視具體應用而定。基本的差別爲:MyISAM類型不支持事務處理等高級處 理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,而InnoDB提供事務支持已 經外部鍵等高級數據庫功能。
MyIASM是IASM表的新版本,有如下擴展:
二進制層次的可移植性。
NULL列索引。
對變長行比ISAM表有更少的碎片。
支持大文件。
更好的索引壓縮。
更好的鍵嗎統計分佈。
更好和更快的auto_increment處理。

MySQL最大的優勢在於MyISAM引擎下的簡單SELECT,INSERT和UPDATE快速操作。
MyISAM類型的數據文件可以在不同操作系統中COPY,這點很重要,佈署的時候方便點。

以下是一些細節和具體實現的差別:
1.InnoDB不支持FULLTEXT類型的索引。
2.InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。

原文地址:http://www.vgot.net/?A803.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章