首页 >数据库 >mysql教程 >如何在 PostgreSQL 中高效生成计算列以加快查询速度?

如何在 PostgreSQL 中高效生成计算列以加快查询速度?

Patricia Arquette
Patricia Arquette原创
2025-01-11 18:41:41813浏览

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