W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
intarray
函數(shù)和操作符 intarray
模塊提供了一些有用的函數(shù)和操作符來操縱不含空值的整數(shù)數(shù)組。也提供了對(duì)使用某些操作符的索引搜索的支持。
如果一個(gè)提供的數(shù)組中包含任何 NULL 元素,所有這些操作都將拋出一個(gè)錯(cuò)誤。
很多這些操作只對(duì)一維數(shù)組有意義。盡管它們將接受更多維數(shù)的數(shù)組輸入,數(shù)據(jù)將被當(dāng)作一個(gè)按照存儲(chǔ)順序排列的線性數(shù)組對(duì)待。
該模塊被認(rèn)為是“trusted”,也就是說,它可以由對(duì)當(dāng)前數(shù)據(jù)庫(kù)具有CREATE
權(quán)限的非超級(jí)用戶安裝。
intarray
函數(shù)和操作符 intarray
模塊提供的函數(shù)被列在表 F.9中,操作符被列在表 F.10中。
表 F.9. intarray
函數(shù)
表 F.10. intarray
操作符
操作符 描述 |
---|
數(shù)組是否重疊(至少有一個(gè)共同元素)? |
左數(shù)組是否包含右數(shù)組? |
左數(shù)組是否包含在右數(shù)組中? |
返回?cái)?shù)組中元素的數(shù)目 |
返回與正確參數(shù)匹配的第一個(gè)數(shù)組元素的索引,如果不匹配則返回 0。 (與 |
將元素添加到數(shù)組末尾。 |
連接數(shù)組。 |
從數(shù)組中移除匹配右參數(shù)的項(xiàng) |
從左數(shù)組中移除右數(shù)組的元素 |
計(jì)算參數(shù)的并集 |
計(jì)算參數(shù)的并集 |
計(jì)算參數(shù)的交集。 |
數(shù)組是否滿足查詢?(見下文) |
數(shù)組是否滿足查詢?( |
(在 PostgreSQL 8.2 之前,包含操作符@>
和<@
分別被稱為@
和~
。這些名稱仍然有效,但是已被棄用并且將最終被移除。注意舊名稱與核心幾何數(shù)據(jù)類型之前所遵循的習(xí)慣相反?。?/p>
操作符&&
、@>
和<@
等效于PostgreSQL的內(nèi)建同名操作符,不過它們只能在不含空值的整數(shù)數(shù)組上工作,而內(nèi)建的操作符可以對(duì)任何數(shù)組類型工作。這種限制使它們?cè)诤芏嗲闆r下比內(nèi)建操作符更快。
@@
和~~
操作符測(cè)試一個(gè)數(shù)組是否滿足一個(gè)query,它被表示成一種特殊數(shù)據(jù)類型query_int
的一個(gè)值。一個(gè)由整數(shù)值組成的查詢會(huì)被針對(duì)數(shù)組的元素檢查,可能會(huì)組合使用操作符&
(AND)、
|
(OR)以及!
(NOT)。根據(jù)需要可以使用圓括號(hào)。例如,查詢1&(2|3)
匹配包含 1 并且還包括 2 或 3 的數(shù)組。
intarray
提供對(duì)于&&
、@>
、<@
和@@
操作符以及常規(guī)數(shù)組相等的索引支持。
提供了兩種參數(shù)化的 GiST 索引操作符類:gist__int_ops
(被默認(rèn)使用)適合于中小尺寸的數(shù)據(jù)集,而gist__intbig_ops
使用一種更大的簽名并且更適合于索引大型數(shù)據(jù)集(即,包含大量可區(qū)分?jǐn)?shù)組值的列)。該實(shí)現(xiàn)使用了一種帶有內(nèi)建有損壓縮的 RD 樹結(jié)構(gòu)。
gist__int_ops
將整數(shù)集近似為整數(shù)范圍數(shù)組。 它的可選整數(shù)參數(shù)numranges
決定了一個(gè)索引鍵中的最大范圍數(shù)。 numranges
的默認(rèn)值是 100。有效值在 1 到 253 之間。 使用更大的數(shù)組作為 GiST 索引鍵會(huì)導(dǎo)致更精確的搜索(掃描更小的索引部分和更少的堆頁面), 以更大的索引為代價(jià)。
gist__intbig_ops
將整數(shù)集近似為位圖簽名。 它的可選整數(shù)參數(shù)siglen
確定簽名長(zhǎng)度(以字節(jié)為單位)。 默認(rèn)簽名長(zhǎng)度為 16 字節(jié)。簽名長(zhǎng)度的有效值介于 1 到 2024 字節(jié)之間。 更長(zhǎng)的簽名導(dǎo)致更精確的搜索(掃描索引的一小部分和更少的堆頁面),但代價(jià)是更大的索引。
也有一種非默認(rèn)的 GIN 操作符類gin__int_ops
支持相同的操作符。
在 GiST 和 GIN 索引之間的選擇取決于 GiST 和 GIN 的相對(duì)性能特點(diǎn), 這將在其他地方討論。
-- 一個(gè)消息可以在一個(gè)或多個(gè)“小節(jié)”中
CREATE TABLE message (mid INT PRIMARY KEY, sections INT[], ...);
-- 創(chuàng)建簽名長(zhǎng)度為 32 字節(jié)的專用索引
CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__int_ops(siglen=32));
-- 選擇小節(jié) 1 或 2 中的消息 - OVERLAP 操作符
SELECT message.mid FROM message WHERE message.sections && '{1,2}';
-- 選擇小節(jié) 1 和 2 中的消息 - CONTAINS 操作符
SELECT message.mid FROM message WHERE message.sections @> '{1,2}';
-- 相同,使用 QUERY 操作符
SELECT message.mid FROM message WHERE message.sections @@ '1&2'::query_int;
源代碼目錄contrib/intarray/bench
包含有一個(gè)基準(zhǔn)測(cè)試套件,可以針對(duì) 一個(gè)安裝好的PostgreSQL服務(wù)器運(yùn)行這個(gè)套件(還要求安裝 DBD::Pg
)。要運(yùn)行測(cè)試基準(zhǔn):
cd .../contrib/intarray/bench
createdb TEST
psql -c "CREATE EXTENSION intarray" TEST
./create_test.pl | psql TEST
./bench.pl
bench.pl
腳本有多個(gè)選項(xiàng),當(dāng)它不使用任何參數(shù)運(yùn)行時(shí)會(huì)顯示這些選項(xiàng)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: