欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MYSQL中COMPACT行格式的具體使用

 更新時間:2024年08月31日 10:38:45   作者:小周同志啊  
compact行格式是mysql中InnoDB存儲引擎存儲數(shù)據(jù)使用的一種行格式,本文主要介紹了MYSQL中COMPACT行格式的具體使用,具有一定的參考價值,感興趣的可以了解一下

MySQL 的數(shù)據(jù)存放在哪個文件?

當我們輸入下面的命令之后:就可以看到 /var/lib/mysql

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

創(chuàng)建一個數(shù)據(jù)庫時, 都會在 /var/lib/mysql/ 目錄里面創(chuàng)建一個以 database 為名的目錄

在數(shù)據(jù)庫中創(chuàng)建表時,

[root@root]#ls /var/lib/mysql/test
db.opt  
t_test.frm  
t_test.ibd

總結(回答問題): MySQL 5.6.6之后,mysql的數(shù)據(jù)默認存放到 .ibd后綴的文件(獨占表空間文件) 中。

  • db.opt:用來存儲當前數(shù)據(jù)庫的默認字符集字符校驗規(guī)則。

  • t_test.frm:t_test 的表結構會保存在這個文件。在 MySQL 中建立一張表都會生成一個.frm 文件,用來保存每個表的元數(shù)據(jù)信息的,主要包含表結構定義。

  • t_test.ibd:t_test 的表數(shù)據(jù)會保存在這個文件。表數(shù)據(jù)既可以存在共享表空間文件(文件名:ibdata1)里,也可以存放在獨占表空間文件(文件名:表名字.ibd)。這個行為是由參數(shù) innodb_file_per_table 控制的,若設置了參數(shù) innodb_file_per_table 為 1,則會將存儲的數(shù)據(jù)、索引等信息單獨存儲在一個獨占表空間,從 MySQL 5.6.6 版本開始,它的默認值就是 1 了,因此從這個版本之后, MySQL 中每一張表的數(shù)據(jù)都存放在一個獨立的 .ibd 文件。

InnoDB 行格式有哪些?

InnoDB 提供了 4 種行格式:Redundant(冗余)、Compact(緊湊)、Dynamic(動態(tài)) 和 Compressed(壓縮行)

  • Redundant:很古老的行格式, MySQL 5.0 版本之前用的行格式,現(xiàn)在基本沒人用了。

  • Compact: 是一種緊湊的行格式,設計的初衷就是為了讓一個數(shù)據(jù)頁中可以存放更多的行記錄,從 MySQL 5.1 版本之后,行格式默認設置成 Compact。

  • Dynamic 和 Compressed 兩個都是緊湊的行格式,它們的行格式都和 Compact 差不多,因為都是基于 Compact 改進一點東西。從 MySQL5.7 版本之后,默認使用 Dynamic 行格式。

其中 Dynamic 和 Compressed 與 Compact格式特別像

 COMPACT 行格式長什么樣?

(結構如圖:來自小林coding)

記錄的額外信息

記錄的額外信息包含 3 個部分:變長字段長度列表、NULL 值列表、記錄頭信息。

1. 變長字段長度列表

表的一行數(shù)據(jù)中,找出類型為 varchar的字段,并將其倒序存儲在 變長字段長度列表。

比如:表的一行數(shù)據(jù)中,varchar字段name為11,varchar字段phone是123。

  • 那么這個行記錄的變長字段長度列表存儲樣式為 03 02

注意:

為什么「變長字段長度列表」的信息要按照逆序存放?

  • 因為這樣可以 使得位置靠前的記錄的真實數(shù)據(jù)和數(shù)據(jù)對應的字段長度信息可以同時在一個 CPU Cache Line 中,這樣就可以提高 CPU Cache 的命中率

每個數(shù)據(jù)庫表的行格式都有「變長字段字節(jié)數(shù)列表」嗎?

  • 當數(shù)據(jù)表沒有變長字段的時候,比如全部都是 int 類型的字段,這時候表里的行格式就不會有「變長字段長度列表」了

2. NULL 值列表

如果存在允許 NULL 值的列,則每個列對應一個二進制位(bit),二進制位按照列的順序逆序排列。

  • 二進制位的值為1時,代表該列的值為NULL。

  • 二進制位的值為0時,代表該列的值不為NULL。

  • 另外,NULL 值列表必須用整數(shù)個字節(jié)的位表示(1字節(jié)8位),如果使用的二進制位個數(shù)不足整數(shù)個字節(jié),則在字節(jié)的高位補 0

注意:

每個數(shù)據(jù)庫表的行格式都有 NULL 值列表 嗎?

  • NULL 值列表 不是必須的。
  • 當數(shù)據(jù)表的字段都定義成 NOT NULL 的時候,這時候表里的行格式就不會有 NULL 值列表了
  • 所以在設計數(shù)據(jù)庫表的時候,通常都是建議將字段設置為 NOT NULL,這樣可以至少節(jié)省 1 字節(jié)的空間(NULL 值列表至少占用 1 字節(jié)空間)。

NULL 值列表 是固定 1 字節(jié)空間嗎?如果這樣的話,一條記錄有 9 個字段值都是 NULL,這時候怎么表示?

  • NULL 值列表 的空間不是固定 1 字節(jié)的。
  • 當一條記錄有 9 個字段值都是 NULL,那么就會創(chuàng)建 2 字節(jié)空間的 NULL 值列表,以此類推。

記錄的真實數(shù)據(jù)

 1. row_id

如果我們建表的時候指定了主鍵或者唯一約束列,那么就沒有 row_id 隱藏字段了。如果既沒有指定主鍵,又沒有唯一約束,那么 InnoDB 就會為記錄添加 row_id 隱藏字段。row_id不是必需的,占用 6 個字節(jié)。

 2. trx_id

事務id,表示這個數(shù)據(jù)是由哪個事務生成的。 trx_id是必需的,占用 6 個字節(jié)。

 3. roll_pointer

這條記錄上一個版本的指針。roll_pointer 是必需的,占用 7 個字節(jié)。

到此這篇關于MYSQL中COMPACT行格式的具體使用的文章就介紹到這了,更多相關MYSQL COMPACT行格式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL 使用 Performance Schema 定位和解決慢 SQL 問題

    MySQL 使用 Performance Schema 定位和解決慢 

    本文介紹了如何使用MySQL的PerformanceSchema來定位和解決慢SQL查詢問題,通過啟用PerformanceSchema并分析相關的系統(tǒng)表,可以收集到詳細的性能數(shù)據(jù),從而識別出影響性能的SQL語句,優(yōu)化策略包括優(yōu)化查詢語句、調整數(shù)據(jù)庫配置等
    2025-02-02
  • mysql 8.0.18 安裝配置方法圖文教程

    mysql 8.0.18 安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql 8.0.18 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 從 MySQL源碼分析網絡IO模型

    從 MySQL源碼分析網絡IO模型

    這篇文章主要為大家介紹了從 MySQL源碼分析網絡IO模型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • mysql中grant?all?privileges?on賦給用戶遠程權限方式

    mysql中grant?all?privileges?on賦給用戶遠程權限方式

    這篇文章主要介紹了mysql中grant?all?privileges?on賦給用戶遠程權限方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MySQL觸發(fā)器 Update觸發(fā)Insert失敗

    MySQL觸發(fā)器 Update觸發(fā)Insert失敗

    這篇文章主要介紹了MySQL觸發(fā)器 Update觸發(fā)Insert失敗 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • mysql如何判斷同一字段是否有重復數(shù)據(jù)

    mysql如何判斷同一字段是否有重復數(shù)據(jù)

    這篇文章主要介紹了mysql如何判斷同一字段是否有重復數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 關于mysql中的json解析函數(shù)JSON_EXTRACT

    關于mysql中的json解析函數(shù)JSON_EXTRACT

    這篇文章主要介紹了關于mysql中的json解析函數(shù)JSON_EXTRACT講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • mysql數(shù)據(jù)庫navicat數(shù)據(jù)同步時誤刪除部分數(shù)據(jù)的解決

    mysql數(shù)據(jù)庫navicat數(shù)據(jù)同步時誤刪除部分數(shù)據(jù)的解決

    本文主要介紹了mysql數(shù)據(jù)庫navicat數(shù)據(jù)同步時誤刪除部分數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-04-04
  • mysql觸發(fā)器實時檢測一條語句進行備份刪除思路詳解

    mysql觸發(fā)器實時檢測一條語句進行備份刪除思路詳解

    遇到過這樣一個需求,在一張表里會不時出現(xiàn) “違規(guī)” 字樣的字段,需要在出現(xiàn)這個字段的時候,把整行的數(shù)據(jù)刪掉,針對這個需求我們該如何操作呢,下面跟隨小編看下mysql觸發(fā)器實時檢測一條語句進行備份刪除的解決思路,一起看看吧
    2021-09-09
  • SQL去重方法匯總

    SQL去重方法匯總

    這篇文章主要給大家分享了SQL去重方法匯總,在使用SQL提數(shù)的時候,常會遇到表內有重復值的時候,比如我們想得到?uv?(獨立訪客),就需要做去重。下面我們就來看看去重都有哪些方法吧
    2022-01-01

最新評論