<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # F.17\. intagg `intagg`模塊提供一個整數聚合器和一個枚舉器。`intagg` 現在已經廢棄了,因為內置的函數提供它的能力的一個超集。不過, 該模塊仍然作為內置函數的兼容性封裝器提供。 ## F.17.1\. 函數 聚合器是一個生產正好包含輸入的整數的整數數組的聚合函數`int_array_aggregate(integer)`。 這是`array_agg`的封裝器,`array_agg`對于任意數組類型做相同的事情。 枚舉器是返回`setof integer`類型的函數`int_array_enum(integer[])`。 本質上是聚合器的反向操作:給出一個整數數組,將其展開為一組行。 這是`unnest`的封裝器,`unnest`對于任意數組類型做相同的事情。 ## F.17.2\. 示例使用 許多數據庫系統有一到多個表的概念。這樣的一個表通常位于兩個索引表之間,例如: ``` CREATE TABLE left (id INT PRIMARY KEY, ...); CREATE TABLE right (id INT PRIMARY KEY, ...); CREATE TABLE one_to_many(left INT REFERENCES left, right INT REFERENCES right); ``` 通常這樣使用: ``` SELECT right.* from right JOIN one_to_many ON (right.id = one_to_many.right) WHERE one_to_many.left = _item_; ``` 這將返回所有在左手邊的表里有記錄的右手邊表里的條目。這在SQL中是一個非常普通的構造。 現在,這個方法在一個有非常大數量的記錄的`one_to_many`表里是很難處理的。 通常,像這樣的連接將會導致索引掃描和抓取表中有左手邊記錄的每個右手邊記錄。 如果你有一個非常動態的系統,那么沒有什么你可以做的。不過,如果你有一些靜態的數據, 你可以使用該聚合器創建一個匯總表。 ``` CREATE TABLE summary AS SELECT left, int_array_aggregate(right) AS right FROM one_to_many GROUP BY left; ``` 這將創建一個表,這個表有每個左邊的條目和一個左邊條目的數組。 現在,如果沒有使用該數組的方法則是相當無用的;這就是為什么有一個數組枚舉器。 你可以 ``` SELECT left, int_array_enum(right) FROM summary WHERE left = _item_; ``` 上面的查詢使用`int_array_enum`產生下面相同的結果 ``` SELECT left, right FROM one_to_many WHERE left = _item_; ``` 不同之處是針對summary表的查詢必須只從表中獲取一行,而針對`one_to_many` 的直接查詢必須索引掃描然后從每條記錄中獲取一行。 在一個系統上,一個顯示了消耗8488的查詢的`EXPLAIN`減少到消耗329。 原始查詢時一個包括`one_to_many`表的連接,替換為: ``` SELECT right, count(right) FROM ( SELECT left, int_array_enum(right) AS right FROM summary JOIN (SELECT left FROM left_table WHERE left = _item_) AS lefts ON (summary.left = lefts.left) ) AS list GROUP BY right ORDER BY count DESC; ```
                  <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>

                              哎呀哎呀视频在线观看