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

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

軟件下載吧

當前位置:軟件下載吧 > 技術開發 > 數據庫 > 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:關鍵字]

相關下載

查看所有評論+

網友評論

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

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 男女免费观看视频 | 欧美做a一级视频免费观看 欧美做爱毛片 | 精品一区二区三区视频在线观看免 | 国产成人亚洲精品无广告 | 国产成人a毛片 | 欧美日韩一区二区不卡三区 | 日韩欧国产精品一区综合无码 | 免费观看的毛片手机视频 | 日本三级一区二区三区 | 欧美一级毛片欧美一级 | aaa成人永久在线观看视频 | 成人午夜影视全部免费看 | 996久久国产精品线观看 | 国产成人精品高清不卡在线 | 国产一级免费 | 国产成人亚洲综合一区 | 日本一区二区三区四区不卡 | 一级特级毛片免费 | 男人扒开腿躁女人j | 免费国产成人午夜在线观看 | 欧美 日韩 国产在线 | 三级国产三级在线 | 国产精品久久久久久一级毛片 | 亚州综合网 | 亚洲欧美另类专区 | 成人三级在线播放线观看 | 97成人精品视频在线播放 | 夜晚福利网站 | 精品厕拍| 亚洲一区www | 男女性男女刺激大片免费观看 | 亚洲在线一区二区三区 | caoporen免费公开视频上传 | 亚洲精品久一区 | 黄色网址在线免费观看 | 日韩中文字幕在线亚洲一区 | 亚洲一区在线播放 | 国产在线一区二区三区在线 | 亚洲一区在线观看视频 | 男女午夜爽爽 | 九九精品视频在线 |