<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # F.18\. intarray `intarray`模塊為操作整數的null-free數組提供一些有用的函數和操作符。 也支持使用其中的一些操作符執行索引搜索。 如果提供的數組包含任何空元素,那么所有這些操作符都將拋出一個錯誤。 這些操作符中的一些只對一維數組敏感。盡管他們將接受多個維數的輸入數組, 數據被按照存儲的順序當做一維數組。 ## F.18.1\. `intarray` 函數和操作符 `intarray`模塊提供的函數顯示在[Table F-8](#calibre_link-564)里, 操作符顯示在[Table F-9](#calibre_link-565)里。 **Table F-8\. `intarray` 函數** | 函數 | 返回類型 | 描述 | 示例 | 結果 | | --- | --- | --- | --- | --- | | `icount(int[])` | `int` | 數組中元素的個數 | `icount('{1,2,3}'::int[])` | `3` | | `sort(int[], text dir)` | `int[]` | 給數組排序 — `dir` 必須為 `asc` 或 `desc` | `sort('{1,2,3}'::int[], 'desc')` | `{3,2,1}` | | `sort(int[])` | `int[]` | 以升序順序排序 | `sort(array[11,77,44])` | `{11,44,77}` | | `sort_asc(int[])` | `int[]` | 以升序順序排序 | | `sort_desc(int[])` | `int[]` | 以降序順序排序 | | `uniq(int[])` | `int[]` | 刪除相鄰的重復 | `uniq(sort('{1,2,3,2,1}'::int[]))` | `{1,2,3}` | | `idx(int[], int item)` | `int` | 匹配`item`的第一個元素中的索引 (如果沒有則為0) | `idx(array[11,22,33,22,11], 22)` | `2` | | `subarray(int[], int start, int len)` | `int[]` | 在 `start` 位置開始的, `len` 個元素的數組的一部分 | `subarray('{1,2,3,2,1}'::int[], 2, 3)` | `{2,3,2}` | | `subarray(int[], int start)` | `int[]` | 在 `start` 位置開始的數組的一部分 | `subarray('{1,2,3,2,1}'::int[], 2)` | `{2,3,2,1}` | | `intset(int)` | `int[]` | 制作單個元素的數組 | `intset(42)` | `{42}` | **Table F-9\. `intarray` 操作符** | 操作符 | 返回 | 描述 | | --- | --- | --- | | `int[] && int[]` | `boolean` | 重復 — 如果數組至少有一個共同元素則為`true` | | `int[] @&gt; int[]` | `boolean` | 包含 — 如果左邊的數組包含右邊的數組則為`true` | | `int[] &lt;@ int[]` | `boolean` | 包含于 — 如果左邊的數組包含于右邊的數組則為`true` | | `# int[]` | `int` | 數組中元素的個數 | | `int[] # int` | `int` | 索引 (和`idx` 函數相同) | | `int[] + int` | `int[]` | 將元素推入數組中(將元素添加到數組的末尾) | | `int[] + int[]` | `int[]` | 數組串聯(右邊的數組添加到左邊的數組的后面) | | `int[] - int` | `int[]` | 刪除匹配右邊數組中元素的項 | | `int[] - int[]` | `int[]` | 從左邊數組中刪除右邊數組中的元素 | | `int[] &#124; int` | `int[]` | 參數的并集 | | `int[] &#124; int[]` | `int[]` | 數組的并集 | | `int[] & int[]` | `int[]` | 數組的交集 | | `int[] @@ query_int` | `boolean` | 如果數組滿足查詢則為`true` (見下文) | | `query_int ~~ int[]` | `boolean` | 如果數組滿足查詢則為`true` (`@@`的交換子) | (PostgreSQL 8.2之前,包含操作符`@&gt;`和`&lt;@` 分別稱為`@` 和 `~`。這些名字仍然可以使用,但是已經廢棄了并且最終會被撤銷。 請注意,舊的名字從大會移除,之前跟隨著核心幾何數據類型!) 操作符`&&`, `@&gt;` 和 `&lt;@`等同于 PostgreSQL同名的內建操作符,除了它們只工作于整數數組不包含空值, 而內建操作符工作于任意數組類型。這個限制使它們在任何情況下都比內建操作符快的多。 `@@` 和 `~~`操作符測試一個數組是否滿足一個_query_, 該查詢表示為一個專門的數據類型`query_int`的值。_query_ 由針對數組元素檢查的整數值組成,可能混合使用操作符`&` (與), `|` (或), 和 `!` (非)。在需要時可以使用括號。 例如,查詢`1&(2|3)`匹配包含1也包含2或3的數組。 ## F.18.2\. 索引支持 `intarray`為`&&`, `@&gt;`, `&lt;@`, 和 `@@`操作符還有普通數組相等提供索引支持, 提供兩個GiST索引操作符類:`gist__int_ops`(缺省使用) 適合于小到中等的數據集,而`gist__intbig_ops` 使用一個大的簽名并且更適合于索引大的數據集(也就是, 包含大量不同數組值的字段)。該實現使用一個RD樹數據結構和內建的有損壓縮。 還有一個非缺省的GIN操作符類`gin__int_ops`支持相同的操作符。 GiST和GIN索引的選擇取決于GiST和GIN相關的性能特性,這個在別的地方討論。 一般來說,GIN索引比GiST索引搜索起來更快一些,而建立或更新要慢一些; 所以GIN更適合于靜態數據,而GiST更適合于經常更新的數據。 ## F.18.3\. 示例 ``` -- 一個message可以在一個或多個"sections"中 CREATE TABLE message (mid INT PRIMARY KEY, sections INT[], ...); -- 創建專門的索引 CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__int_ops); -- 在section 1或2中選擇message -OVERLAP操作符 SELECT message.mid FROM message WHERE message.sections && '{1,2}'; -- 在section 1和2中選擇message -CONTAINS操作符 SELECT message.mid FROM message WHERE message.sections @> '{1,2}'; -- 相同的,使用QUERY操作符 SELECT message.mid FROM message WHERE message.sections @@ '1&2'::query_int; ``` ## F.18.4\. 基準 源目錄`contrib/intarray/bench`包含一個基準測試套件。運行: ``` cd .../bench createdb TEST psql TEST < ../_int.sql ./create_test.pl | psql TEST ./bench.pl ``` `bench.pl`腳本有許多選項,當它不帶任何參數的運行時顯示。 ## F.18.5\. 作者 所有工作都是Teodor Sigaev (`&lt;[teodor@sigaev.ru](mailto:teodor@sigaev.ru)&gt;`)和 Oleg Bartunov (`&lt;[oleg@sai.msu.su](mailto:oleg@sai.msu.su)&gt;`)完成的。參閱 [http://www.sai.msu.su/~megera/postgres/gist/](http://www.sai.msu.su/~megera/postgres/gist/)獲取額外的信息。 Andrey Oktyabrski在添加新的函數和操作符上做了一個偉大的工作。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看