优化 PostgreSQL 中的频繁子查询
PostgreSQL 用户经常遇到依赖重复子查询的查询,通常会聚合相关表中的数据。 本文探讨了管理这些常见子查询模式的有效方法,从而提高性能和代码可读性。 一个典型的场景是根据外键关系从辅助表中检索聚合数据。
视图方法:一个强大的解决方案
虽然直接将子查询嵌入为伪列是不可能的,但 PostgreSQL 的 VIEW
功能提供了一个很好的替代方案。 VIEW
定义了一个基于现有表和查询的虚拟表,有效地创建了数据的自定义视图。这样可以避免修改基表结构,同时实现所需的结果。
生成列(PostgreSQL 11):增强性能
PostgreSQL 11 及更高版本提供生成列(也称为虚拟列)。这些允许定义一个列,其值是使用表达式计算的,反映了嵌入子查询的目标。 这种方法通常会产生比视图更好的性能。
模拟旧版本中生成的列
对于 PostgreSQL 11 之前的版本,或者首选虚拟列方法时,用户定义的函数可以模拟生成的列。 该函数将表的行类型作为输入并计算所需的值。 然后该函数链接到伪列,实现与生成列类似的功能。
实际实施
我们举个例子来说明一下:
-- Create tables CREATE TABLE tbl_a (a_id int, col1 int, col2 int); CREATE TABLE tbl_b (b_id int, a_id int, colx int); -- Sample data INSERT INTO tbl_a VALUES (1,1,1), (2,2,2), (3,3,3), (4,4,4); 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); -- Function to emulate the generated column 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$;
现在,访问col3
伪列:
SELECT a_id, col1, col2, tbl_a.col3 FROM tbl_a; SELECT *, a.col3 FROM tbl_a a;
生成列的优点
与视图相比,生成的列提供:
-
无缝集成:包含在
SELECT *
查询中,但没有明确提及。 - 动态更新:自动反映基表中的更改。
- 优化性能:利用 PostgreSQL 的查询优化器提高效率。
结论
虽然不支持直接嵌入子查询,但 PostgreSQL 提供了有效的替代方案——视图和生成列——来管理常用的子查询。 这些方法提高了查询性能和代码清晰度,从而实现更高效的数据库管理。 选择最适合您的 PostgreSQL 版本和性能要求的方法。
以上是如何在 PostgreSQL 中高效存储和访问常用的子查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver Mac版
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),