使用计算列优化 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中文网其他相关文章!