的PostgreSQL 9.4Undestanding位圖索引
我剛面臨稱爲Bitmap Index Scan
節點和所謂的底層位圖數據結構的概念提到in this post。據我所知,PostgreSQL
不支持創建位圖索引。
問:所以我們需要使用位圖數據結構,以便隨時進行Bitmap Index Scan
我們需要先建立它或PostgreSQL建設btree
指數的過程中創建並重建其表的任何時間改變?
的PostgreSQL 9.4Undestanding位圖索引
我剛面臨稱爲Bitmap Index Scan
節點和所謂的底層位圖數據結構的概念提到in this post。據我所知,PostgreSQL
不支持創建位圖索引。
問:所以我們需要使用位圖數據結構,以便隨時進行Bitmap Index Scan
我們需要先建立它或PostgreSQL建設btree
指數的過程中創建並重建其表的任何時間改變?
頁面位圖是爲每個查詢動態創建的。它不被緩存或重新使用,並且在位圖索引掃描結束時被丟棄。
由於的內容取決於查詢謂詞,因此預先創建頁面位圖沒有任何意義。
說你正在尋找x=1 and y=2
。您在x
和y
上有b-tree索引。 PostgreSQL不會將x
和y
組合成位圖,然後搜索位圖。它會掃描索引x
以獲取所有頁面的頁面地址,其中x=1
將生成一個位圖,其中可能包含x=1
的頁面爲真。然後它掃描y
查找頁面地址,其中y
可能等於2
,從中創建一個位圖。然後它和他們找到x=1
和y=2
可能是真的頁面。最後,它掃描自己的表格,只讀取可能包含候選值的頁面,讀取每個頁面並僅保留行數爲x=1 and y=2
。
現在,如果您正在尋找像緩存的預構建位圖索引之類的東西,PostgreSQL 9.5中就有這樣的事情:BRIN indexes。這些適用於非常大的表格,並且提供了一種查找可以跳過的表格範圍的方法,因爲它們已知不包含所需的值。
數據頁面的位圖是根據需要(每個查詢)從索引或更多索引創建的。它用於索引返回的行數少於或多於兩個索引時使用相同的關係。位圖的內容控制應該處理哪些頁面以及應該跳過哪些頁面。
此掃描方法的基本要求是表格上的現有索引。
那麼,我們從零開始構建結構_任何時候我們需要做'位圖堆掃描'? –
不,這對用戶是透明的。 –