日韩小视频-日韩久久一区二区三区-日韩久久一级毛片-日韩久久久精品中文字幕-国产精品亚洲精品影院-国产精品亚洲欧美云霸高清

下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當前位置:軟件下載吧 > 技術開發 > 數據庫 > PostgreSQL的B-tree索引用法詳解

PostgreSQL的B-tree索引用法詳解

時間:2024-02-28 13:28作者:下載吧人氣:22

結構

B-tree索引適合用于存儲排序的數據。對于這種數據類型需要定義大于、大于等于、小于、小于等于操作符。

通常情況下,B-tree的索引記錄存儲在數據頁中。葉子頁中的記錄包含索引數據(keys)以及指向heap tuple記錄(即表的行記錄TIDs)的指針。內部頁中的記錄包含指向索引子頁的指針和子頁中最小值。

B-tree有幾點重要的特性:

1、B-tree是平衡樹,即每個葉子頁到root頁中間有相同個數的內部頁。因此查詢任何一個值的時間是相同的。

2、B-tree中一個節點有多個分支,即每頁(通常8KB)具有許多TIDs。因此B-tree的高度比較低,通常4到5層就可以存儲大量行記錄。

3、索引中的數據以非遞減的順序存儲(頁之間以及頁內都是這種順序),同級的數據頁由雙向鏈表連接。因此不需要每次都返回root,通過遍歷鏈表就可以獲取一個有序的數據集。

下面是一個索引的簡單例子,該索引存儲的記錄為整型并只有一個字段:

PostgreSQL的B-tree索引用法詳解

該索引最頂層的頁是元數據頁,該數據頁存儲索引root頁的相關信息。內部節點位于root下面,葉子頁位于最下面一層。向下的箭頭表示由葉子節點指向表記錄(TIDs)。

等值查詢

例如通過”indexed-field = expression”形式的條件查詢49這個值。

PostgreSQL的B-tree索引用法詳解

root節點有三個記錄:(4,32,64)。從root節點開始進行搜索,由于32≤ 49 < 64,所以選擇32這個值進入其子節點。通過同樣的方法繼續向下進行搜索一直到葉子節點,最后查詢到49這個值。

實際上,查詢算法遠不止看上去的這么簡單。比如,該索引是非唯一索引時,允許存在許多相同值的記錄,并且這些相同的記錄不止存放在一個頁中。此時該如何查詢?我們返回到上面的的例子,定位到第二層節點(32,43,49)。如果選擇49這個值并向下進入其子節點搜索,就會跳過前一個葉子頁中的49這個值。因此,在內部節點進行等值查詢49時,定位到49這個值,然后選擇49的前一個值43,向下進入其子節點進行搜索。最后,在底層節點中從左到右進行搜索。

(另外一個復雜的地方是,查詢的過程中樹結構可能會改變,比如分裂)

非等值查詢

通過”indexed-field ≤ expression” (or “indexed-field ≥ expression”)查詢時,首先通過”indexed-field = expression”形式進行等值(如果存在該值)查詢,定位到葉子節點后,再向左或向右進行遍歷檢索。

下圖是查詢 n ≤ 35的示意圖:

PostgreSQL的B-tree索引用法詳解

大于和小于可以通過同樣的方法進行查詢。查詢時需要排除等值查詢出的值。

范圍查詢

范圍查詢”expression1 ≤ indexed-field ≤ expression2″時,需要通過 “expression1 ≤ indexed-field =expression2″找到一匹配值,然后在葉子節點從左到右進行檢索,一直到不滿足”indexed-field ≤ expression2” 的條件為止;或者反過來,首先通過第二個表達式進行檢索,在葉子節點定位到該值后,再從右向左進行檢索,一直到不滿足第一個表達式的條件為止。

下圖是23 ≤ n ≤ 64的查詢示意圖:

PostgreSQL的B-tree索引用法詳解

案例

下面是一個查詢計劃的實例。通過demo database中的aircraft表進行介紹。該表有9行數據,由于整個表只有一個數據頁,所以執行計劃不會使用索引。為了解釋說明問題,我們使用整個表進行說明。

demo=# select * from aircrafts;
aircraft_code | model | range
—————+———————+——-
773 | Boeing 777-300 | 11100
763 | Boeing 767-300 | 7900
SU9 | Sukhoi SuperJet-100 | 3000
320 | Airbus A320-200 | 5700
321 | Airbus A321-200 | 5600
319 | Airbus A319-100 | 6700
733 | Boeing 737-300 | 4200
CN1 | Cessna 208 Caravan | 1200
CR2 | Bombardier CRJ-200 | 2700
(9 rows)
demo=# create index on aircrafts(range);
demo=# set enable_seqscan = off;

標簽[db:關鍵字]

相關下載

查看所有評論+

網友評論

網友
您的評論需要經過審核才能顯示

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 亚洲综合日韩欧美一区二区三 | 日本视频播放免费线上观看 | 伊人狠狠丁香婷婷综合色 | 96精品视频在线播放免费观看 | 成人午夜私人影院入口 | 欧美精品首页 | 久久精品www| 91黑丝国产线观看免费 | 国内精自品线一区91 | 另类亚洲孕妇分娩网址 | 国产三级三级三级三级 | 香港激情黄三级在线视频 | 天天激情站 | 国产一及片| 亚洲精品国产福利一区二区三区 | 国产农村乱 | 久热香蕉精品视频在线播放 | 性感美女一级毛片 | 一级毛片在线免费播放 | 久久国产精品夜色 | 久草青青视频 | 国产精品无圣光一区二区 | 亚洲精品国产一区二区三区四区 | 粉嫩jk制服美女啪啪 | 亚洲欧美一区二区三区久久 | 午夜伊人网| 免费观看欧美一区二区三区 | 久久亚洲国产伦理 | 久久免费视频在线观看30 | 欧美国产综合日韩一区二区 | 国产在线步兵一区二区三区 | 国产网曝手机视频在线观看 | 国内自拍第五一页 | 免费在线一区二区三区 | 国产美女精品视频 | 亚洲精品成人 | 国语自产精品视频 | 亚洲在线观看免费视频 | 99热热久久这里只有精品166 | 日韩性网站 | 一区二区三区网站在线免费线观看 |