數據庫邏輯結構單元


0:數據庫邏輯結構包括表空間,段,區,數據塊

  1、數據庫在邏輯上是由多個表間組成的,表空間中存儲的對象是段;

  2、段,由區組成,比如數據段,索引段,和undo段;

  3、區,是磁盤分配的最小單位,是物理上連續的塊,一個extent的大小是1M,由64個頁組成;

  4、塊(頁),在MySQL中塊就是頁,是數據庫中最小的I/O單位,同時也是內存數據緩沖區的單位,及數據文件存儲空間單位,一個page的大小是16K(默認,一般也不會更改),innodb_page_size,其值應設置為操作系統塊大小的整數倍。

 

1、表空間(tablespace)

  表空間是數據庫最大的邏輯結構,一個數據庫在邏輯上由多個表空間組成,一個表空間只隸屬於一個數據庫。

  1、一個表空間可以有多數據文件,但是一個數據文件只能屬於一個表空間;

  2、一個表空間就是一片磁盤區域,由一個或者多個磁盤文件組成,一個表空間可以容納許多表、索引等。

 

2、段(segment)

  一個表就是一個段,段可以分成:數據段、索引段、回滾段

  1、數據段用來存儲用戶的數據,每個表都有一個對應的回滾段,其名稱和數據表的名字相同;

  2、索引段用來存儲系統、用戶的索引信息;

  3、回滾段用來存儲用戶數據修改前的值,回退段與事務是一對多的關系,一個事務只能使用一個回退段,而一個回退段可存放一個或多個事務的回退數據。

 

3、區(extent)

  區是磁盤空間分配的最小單位;

  1、磁盤按區划分,每次至少分配一個區;

  2、區存儲於段中,它由連續的數據塊組成。

 

4、塊(data block)、頁(page)

  數據塊是數據庫中最小的數據組織單位與管理單位,是數據文件磁盤存儲空間單位,也是數據庫I/O 的最小單位。

 

5、數據行的格式

行的幾個關注要素:

  1、變長列字節列表

    1>記錄了各個變長列的長度情況,方便找到變長邊界;

    2>按照列順序逆序放置

  2、null列表

    1>記錄null的列的標志信息,因為null的列在行記錄里不記錄列值,方便找的時候知道哪列是空的

    2>空列不占空間,可變長+null位,定位后面的列數據

  3、行頭標志

  4、列數據:實際我們存放的數據

  5、刪除標記(deleted_flag):刪除時對該行進行標記“deleted”,待purge

    對於未提交事務的刪除,其他可以繼續select,因為沒有真正的刪除,也就不用勞煩undo了。

  6、xid(6字節)、rollpointer(7字節)

    如果沒有定義主鍵的話,每行還會增加個rowid列(6字節),作為隱藏主鍵;

 

6、行列接

  1、varchar可以很長,varchar(20):可以存放20個字符

    gbk:一個字符占2個字節,因此實際上占用40個字節

    utf8:一個字符大約占3個字節,因此實際上占用60個字節

  2、blob列,主要用來存放圖片、文件

建議:

  1、對於大列,單獨獨立出去,采用垂直拆分表的方式來實現

  2、不要出現一個表中存在多列、長列的情況,否則表的性能會很低下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM