首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中高效產生計算列以加快查詢速度?

如何在 PostgreSQL 中高效產生計算列以加快查詢速度?

Patricia Arquette
Patricia Arquette原創
2025-01-11 18:41:41812瀏覽

How Can I Efficiently Generate Computed Columns in PostgreSQL for Faster Queries?

使用計算列最佳化 PostgreSQL 查詢

對於頻繁存取多個表的派生值的查詢,在目標表中建立計算列可顯著提高效能。 PostgreSQL 提供了多種方法來實現這一點。

視圖雖然提供查詢的邏輯表示,但對於效能關鍵場景來說並不理想,因為它們不物理儲存資料。

一個更好的解決方案是 PostgreSQL 的「生成列」(從版本 11 開始提供)。 STORED 產生的列直接在表中儲存計算值,提供與傳統列相同的效能。

對於較舊的 PostgreSQL 版本或不適合虛擬產生列的情況,您可以使用函數模擬計算列。 這些函數接受表類型作為輸入並傳回計算值,實際上充當偽列。

我們舉個例子來說明:

<code class="language-sql">CREATE TABLE tbl_a (a_id int, col1 int, col2 int);
INSERT INTO tbl_a VALUES (1,1,1), (2,2,2), (3,3,3), (4,4,4);

CREATE TABLE tbl_b (b_id int, a_id int, colx int);
INSERT INTO tbl_b VALUES
  (1,1,5),  (2,1,5),  (3,1,1)
, (4,2,8),  (5,2,8),  (6,2,6)
, (7,3,11), (8,3,11), (9,3,11);</code>

使用函數建立偽列col3

<code class="language-sql">CREATE FUNCTION col3(tbl_a)
  RETURNS int8
  LANGUAGE sql STABLE AS
$func$
SELECT sum(colx)
FROM   tbl_b b
WHERE  b.a_id = .a_id
$func$;</code>

使用屬性表示法 (tbl_a.col3) 或函數表示法 (col3(tbl_a)) 存取計算值,從而提供查詢彈性。 記得使用表別名來防止命名衝突。

使用計算列或產生函數可以最大限度地減少子查詢、簡化資料檢索並顯著提高查詢速度。 最佳方法取決於您的特定需求和 PostgreSQL 版本。 仔細考慮可確保高效的資料庫設計。

以上是如何在 PostgreSQL 中高效產生計算列以加快查詢速度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn