一文講清,MySQL數(shù)據(jù)庫(kù)一行數(shù)據(jù)在磁盤上是怎么存儲(chǔ)的?
數(shù)據(jù)庫(kù)給使用者最直觀的感覺(jué),就是庫(kù)、表、行、字段,這些概念都是邏輯上的。前面我們深入講解了Buffer Pool的內(nèi)部原理,它的基本存儲(chǔ)單位是默認(rèn)大小為16K的頁(yè)。每頁(yè)都保存了一行一行的數(shù)據(jù)。我們按照數(shù)據(jù)頁(yè)為單位把磁盤上的數(shù)據(jù)加載到內(nèi)存的緩存頁(yè)里來(lái),也是按照頁(yè)為單位,把緩存頁(yè)的數(shù)據(jù)刷入磁盤的數(shù)據(jù)頁(yè)中。
而我們常常聽(tīng)到數(shù)據(jù)頁(yè)、數(shù)據(jù)區(qū)、表空間這些名詞,其實(shí)這些名詞是物理層面上的概念。我們不經(jīng)要問(wèn),庫(kù)、表、行、字段,這些邏輯上的概念是如何對(duì)應(yīng)到物理層的概念上的呢?我們查詢一行數(shù)據(jù),是如何找到條數(shù)據(jù)所在的數(shù)據(jù)頁(yè)的呢?
接下來(lái),筆者用幾篇文章,講解下MySQL的表空間、數(shù)據(jù)區(qū)、數(shù)據(jù)頁(yè)這些概念,當(dāng)大家明白搞明白這些東西后,就自然理解上面的問(wèn)題了。
行格式
行格式即行記錄的物理存儲(chǔ)格式,決定了這張表數(shù)據(jù)的物理存儲(chǔ)方式,會(huì)影響crud性能。
指定行格式
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名稱;ALTER?TABLE?表名?ROW_FORMAT=行格式名稱;
InnoDB 包含以下四種行格式
Compact Redundant Dynamic Compressed
,VARCHAR(20),CHAR(1),CHAR(1),插入一行數(shù)據(jù):hello, ni, hao, a, b。
CREATE TABLE user (name VARCHAR(10)NOT NULL,address VARCHAR(20),gender CHAR(1),job VARCHAR(30),school VARCHAR(50))ROW_FORMAT = COMPACT;
記錄頭信息詳細(xì)如下表所示,有的暫時(shí)沒(méi)有用到,可以暫時(shí)不用深究它。


有道無(wú)術(shù),術(shù)可成;有術(shù)無(wú)道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
