InnoDB中文參考手冊 11表和索引結構

2021-04-17 06:04:40 字數 2137 閱讀 4888

innodb

中文參考手冊---犬犬(心帆)翻譯11表和

索引結構

在目錄下的.frm檔案中儲存它的資料字典資訊。但是每個

innodb型別表也同樣在

innodb表空間內的內部的資料字典中存在它自己的進入點。當mysql移除(drop)乙個表或乙個資料庫時,它將同時刪除.frm檔案,以及在

innodb的資料字典中相對應的進入點。這就是為什麼不能通過簡單的刪除.frm檔案為移除資料庫中的

innodb型別表的原因,以及為什麼在mysql版本<=3.23.43的版本中,dropdatabase不能用於

innodb表的原因。

每乙個innodb表都有乙個被稱為聚簇索引的特殊索引用於儲存記錄行資訊。如果乙個表定義乙個primarykey,那麼主鍵的索引就是聚簇索引。

如果表沒有定義乙個primarykey,mysql將選出第乙個notnull欄位的unique鍵做為主鍵,

innodb也將用這個鍵的索引做為聚簇索引。如果表中沒有這樣的鍵,

innodb將在內部產生乙個聚簇索引,它是由按

innodb分配給它們的rowid順序排序的記錄行組成。這個rowid是乙個單調地增加並插入新行的6-byte欄位。因而由rowid排序的記錄順序也就是插入時的物理順序。

通過聚簇索引訪問乙個記錄行是非常快的,因為記錄行資料與引導我們查詢到它的索引在同乙個頁面上。在大多數的資料庫系統中記錄行資料與索引記錄通常並不是放在同乙個頁面上的。如果乙個錶太大了,那麼聚簇索引體系通常比傳統的方式更能減少磁碟i/o。

在非-聚簇索引(non-clusteredindexes)中的記錄(我們通常稱它為輔助索引secondaryindexes),在

innodb中會為這行包含主鍵值。

innodb將使用這個主鍵值來在聚簇索引中查詢這行。注意如果主鍵太長,那麼輔助索引將會占用更多的空間。

innodb在比較不同長度的char和varchar時,較短字串的多餘長度將被空格(spaces)填充。

11.1索引的物理結構

allindexesin

innodb中所有的索引是索引記錄存放在樹的葉頁面(leafpages)上的b-trees。乙個索引頁面的大小預設為16kb。當新的記錄被插入時,

innodb將試圖為將來的插入與更新索引記錄保留頁面的1/16空餘。

如果索引記錄以乙個連續的(公升序或降序)被插入,那麼索引頁面的將會被使用約15/16。如果以乙個隨機的順序插入,那麼頁面大約使用了1/2-15/16。如果乙個索引頁面被撤銷(drop)地低於1/2,那麼

innodb將縮短索引樹並釋放頁面空間。

11.2插入緩衝

主鍵是乙個唯一識別符號,新的記錄以主鍵的公升序被插入,這在資料庫系統中是乙個普遍的情形。因而在聚簇索引內插入的值不需要在硬碟上隨意讀取。

另一方面,輔助索引通常是非唯一的(non-unique),插入在輔助索引中是相當隨意的順序。如果在

innodb中不使用乙個特殊的機制這將會引起大量隨機的磁碟i/o。

如果乙個索引記錄被插入到乙個非唯一的輔助索引中去,

innodb將檢查輔助索引頁面是否已在緩衝池(bufferpool)中。在這種情形下,

innodb直接地將它插入到索引頁面中去。但是,如果在緩衝池中沒有發現索引頁面,inndb將索引記錄插入到乙個特殊的插入緩衝結構中去。插入緩衝被控制地如些小以至於可以完全放在緩衝池中,因而插入速度很快。

插入緩衝會定時地歸併到資料庫中的輔助索引樹中去。為了減少磁碟i/o,通常將同乙個頁面上的幾個插入同時歸併到索引樹上。插入緩衝可以提高向乙個表中插入速度15倍。

11.3適應性的雜湊索引(adaptivehashindexes)

如果乙個資料庫幾乎佔滿了所有主同存,那麼在其上執行查詢的乙個快捷之路就是使用雜湊索引(hashindexes)。

innodb有乙個用於監視在表定義的索引上的索引搜尋動作的自動調整結構,如果

innodb發現乙個雜湊索引對查詢有益,那麼它將自動地建造這個雜湊索引。

但是要注意地就是雜湊索引通常是基於表中已存在的b-tree建立的。

innodb可能通過b-tree中定義的任何長度的鍵的字首來構建雜湊索引,這依賴於

innodb觀察b-tree上索引的模式。乙個雜湊索引可以是部分的:它在緩衝池中並不需要有整個b-tree索引的高速緩衝。

innodb按照需要來為經常訪問的索引頁面構建雜湊索引。1

FastCGI中文參考手冊

請求已發生次數 count 2.fastcgi程式為長生存期應用程式,如在設計中有缺陷會產生記憶體溢位問題,對伺服器造成安全隱患。且這種溢位是不可預見性。本程式初始化了乙個控制變數,一旦使用者請求次數達到預先設定的數量程式結束,下一次請求將重新初始化。usr bin perl use fcgi us...

MySQL中文參考手冊

mysql中文參考手冊 0?譯者序 1 mysql 一般的資訊 1.1 什麼是 mysql 1.2 關於本手冊 1.2.1 本手冊中使用的約定 1.3 mysql 歷史 1.4 mysql 主要特徵 1.5 mysql 穩定性?1.6 順應 2000 年 1.7 sql 一般資訊和教程 1.8 有用...

中文參考手冊4安裝MySQL

本章描述怎樣獲得並安裝mysql 對於你能從其獲得mysql的站點列表,見。要了解支援哪些平台,見4.2mysql支援的。可獲得mysql的多個版本,以二進位制 和源 形式分發。為了確定你應該使用的分發的版本和型別,見。針對二進位制 和源 分發的安裝指令在和講述。每套指令均包含乙個關於你可能涉及的系...