儲存查詢的虛擬欄位
PostgreSQL 提供多種方法將複雜的計算或子查詢整合到表格的模式中。一種方法是建立視圖,它提供資料的虛擬表示,可以像查詢普通表一樣查詢。但是,視圖不會儲存在資料庫中,並且每次查詢都會重新計算,對於頻繁使用的複雜查詢來說,這可能會降低效率。
另一種方法是使用儲存計算列,它允許您根據包含其他列或外部資料來源的表達式定義列的值。儲存計算列物理儲存在表中,並且每當基礎資料變更時都會計算和更新其值。
要使用儲存運算列將子查詢儲存為偽列,您可以建立一個封裝子查詢的函數,並在計算列定義中引用它。以下是實現此目的的範例:
<code class="language-sql">CREATE FUNCTION col3(tbl_a) RETURNS int8 LANGUAGE SQL STABLE AS $$ SELECT sum(colx) FROM tbl_b b WHERE b.a_id = .a_id $$; ALTER TABLE tbl_a ADD COLUMN col3 INT8 STORED AS col3(tbl_a);</code>
這種方法允許您像查詢普通列一樣查詢派生列:
<code class="language-sql">SELECT a_id, col1, col2, col3 FROM tbl_a;</code>
與視圖相比,使用儲存運算列的優點在於列值是實體儲存的,不需要每次查詢重新計算,從而提高了頻繁使用的複雜查詢的效能。此外,儲存計算列完全整合到表格模式中,允許它們用於索引、外鍵約束和其他資料庫操作。
以上是PostgreSQL 儲存運算列如何提升複雜查詢的效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!