真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么理解InnoDB數(shù)據(jù)字典-創(chuàng)新互聯(lián)

本篇內(nèi)容介紹了“怎么理解InnoDB數(shù)據(jù)字典”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)執(zhí)著的堅持網(wǎng)站建設(shè),微信小程序;我們不會轉(zhuǎn)行,已經(jīng)持續(xù)穩(wěn)定運營10多年。專業(yè)的技術(shù),豐富的成功經(jīng)驗和創(chuàng)作思維,提供一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造品牌,攜手廣大客戶,共同發(fā)展進步。

   在InnoDB中,系統(tǒng)表實際上是看不到的,不像Oracle那樣可以方便地通過一個查詢語句就能得到其中的內(nèi)容。因為MySQL是一個插件式的數(shù)據(jù)庫管理系統(tǒng)。它的結(jié)構(gòu)分為兩層,分別是Server層和存儲引擎層。最早的存儲引擎是MyISAM,它是沒有數(shù)據(jù)字典的,關(guān)于表結(jié)構(gòu),它擁有的只有.frm文件,所以這導致了InnoDB也必須要有這個文件才使得Server層識別并管理它。對于Server層,一個表是什么存儲引擎,這是表的屬性。具體深入到每一個存儲引擎內(nèi)部,數(shù)據(jù)字典就不被Server層來管理了,這就導致數(shù)據(jù)字典不能被用戶感知了。
系統(tǒng)表結(jié)構(gòu)
    InnoDB有四個最基本的系統(tǒng)表,用來存儲用戶定義的表,列,索引及索引列等信息,這些表分別為SYS_TABLES,SYS_COLUMNS,SYS_INDEXES,SYS_FIELDS。
SYS_TABLES
用來存儲所有InnoDB為存儲引擎的表
NAME:表示一個表的表名
ID:表示這個表的ID號
N_COLS:表示這個表的列的個數(shù),建表指定的列數(shù)。
TYPE:表示這個表的存儲類型,包括記錄的格式,壓縮等信息。
SPACE:表示這個表所在表空間ID號。這個表對應(yīng)的主鍵列為NAME,同時還有一個在ID號上的唯一索引。
SYS_COLUMNS
用來存儲InnoDB中定義的所有表中所有列的信息,每一列對應(yīng)這個表的一條記錄。
TABLE_ID:表示這個列所屬的表的ID號
POS:表示這個列在表中是第幾列。
NAME:表示這個列名。
MTYPE:表示這個列的主數(shù)據(jù)類型。
PRTYPE:表示這個列的一些精確數(shù)據(jù)類型,它是一個組合值,包括NULL標志,是否有符號數(shù)的標志,是否是二進制字符串的標志及表示這個列是真的varchar
LEN:表示這個列數(shù)據(jù)的精度,目前沒有用到。
SYS_INDEXES
用來存儲InnoDB中所有表的索引信息,每一條記錄對應(yīng)一個索引
TABLE_ID:表示這個索引所屬的表的ID號。
ID:表示這個索引的索引ID號
NAME:表示這個索引的索引名
N_FIELDS:表示這個索引包括的列個數(shù)。
TYPE:表示這個索引的類型,包括聚簇索引,唯一索引,等
SPACE:表示這個索引數(shù)據(jù)所在的表空間ID號
PAGE_NO:表示這個索引對應(yīng)的B+樹根頁面。
SYS_FIEDS
用來存儲所有索引中定義的索引列,每一條記錄對應(yīng)一個索引列。
INDEX_ID:這個列所在的索引
POS:這個列在某個索引中是第幾個索引列
COL_NAME:這個索引列的列名。
字典表的加載
  InnoDB啟動的時候,如果是新建數(shù)據(jù)庫,則需要初始化庫,索引需要創(chuàng)建字典管理的B+樹信息。因為InnoDB中的系統(tǒng)表的結(jié)構(gòu),個數(shù)等都是固定的,所以在初始化庫的時候只需要創(chuàng)建這幾個表的存儲B+樹即可。同時把將這幾個B+樹的根頁號存儲在一個固定位置,就不需要將這幾個表自身的信息存儲在系統(tǒng)表中了。對于一個B樹,只要找到其根頁面,就可以找檢索其數(shù)據(jù)了。
  對于數(shù)據(jù)字典表根頁面位置的存儲方式,InnoDB用了一個專門的頁面(0號表空間0號文件的7號頁面)來管理數(shù)據(jù)字典信息。這個頁面用來存儲4個系統(tǒng)表的五個根頁面號(有5個索引)。
  普通用戶表的加載過程,當用戶訪問一個表時,系統(tǒng)首先會從表對象緩沖池中查找這個表SHARE對象,如果找到,則直接從其實例化表對象空間鏈表中拿一個空閑的實例化的表對象使用,如果沒有一個可用的實例化對象,則需要重新打開(實例化這個表),在實例化這個表的時候,需要找到這個表的字典信息,包括這個表本身,列信息及索引信息等,這些信息很多都是從SHARE對象處獲得。如果沒有SHARE對象,則需要從系統(tǒng)表中構(gòu)造SHARE對象。
Rowid管理
  在InnoDB中,用戶表中的記錄不一定都會有一個Rowid列,Rowid只有在一個表沒有定義主鍵時,才會分配。而Rowid的管理分配,并不是一個表獨享一個ID空間,而是全局的,使用表都共享這個ID號。
  Rowid的分配并不會直接修改頁面,只要這個值為256的倍數(shù)的時候才會寫入一次。那么如果插入200次,這些值還沒有被寫入,這是系統(tǒng)重新啟動,ID號豈不是重復使用,因為數(shù)據(jù)庫啟動的時候會調(diào)用函數(shù)做一個工作,就是將上次寫入的Rowid值向上對齊256后在加上256,這樣就不會有問題了。

“怎么理解InnoDB數(shù)據(jù)字典”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


標題名稱:怎么理解InnoDB數(shù)據(jù)字典-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/dgphgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部