PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图提供一个强大的机制,通过预先计算并将查询结果集存储为物理表来提高查询性能。本教程将使用 DVD Rental Database 数据库作为演示例子,指导你在 PostgreSQL中创建实体化视图。

了解实体化视图

实体化视图是查询结果集的快照,以物理表的形式存储。与常规视图不同,实体化视图是虚拟的,每次被引用时都会执行底层查询,实体化视图能持久化数据,并通过定期刷新来提高查询性能。

相比于频繁的查询执行,实体化视图对于底层数据变化不频繁的场景是非常有用的。这使得它们成为报告、数据仓库和实时数据要求不严格的场景的理想选择。

设置 DVD Rental 数据库

在深入探讨实体化视图前,让我们先来设置 DVD Rental 数据库。它是 MySQL 常用的 Sakila 数据库样例的 PostgreSQL 版本。你可以从官方 PostgreSQL 教程网页(PostgreSQL Sample Database)上下载 DVD Rental 数据库。

数据库文件为 ZIP 格式(dvdrental.zip),所以在加载数据库样例到 PostgreSQL 数据库服务器前,你需要将它解压缩为 dvdrental.tar。解压为 .tar 文件后,创建名为“dvdrental”的新数据库,然后执行 pg_restore 命令以将 .tar 文件内容填充到 dvdrental 数据库中。

pg_restore -U postgres -d dvdrental D:\sampledb\postgres\dvdrental.tar

将上面的路径替换为你系统上指向已解压的 dvdrental.tar 路径。

你可以点击 此处 查看详细的安装说明。

创建实体化视图

假设我们想创建一个实体化视图,显示每个电影类别产生的总收入。以下是操作步骤:

  • 连接你的 PostgreSQL 数据库
  • 通过下面的 DML 语句创建实体化视图:
CREATE MATERIALIZED VIEW mv_category_revenue AS
SELECT
    c.name AS category,
    SUM(p.amount) AS total_revenue
FROM
    category c
    JOIN film_category fc ON c.category_id = fc.category_id
    JOIN film f ON fc.film_id = f.film_id
    JOIN inventory i ON f.film_id = i.film_id
    JOIN rental r ON i.inventory_id = r.inventory_id
    JOIN payment p ON r.rental_id = p.rental_id
GROUP BY
    c.name;

例子中,我们将 DVD Rental 数据库中多张表进行联合,以计算每个电影类别的总收入。

在 Navicat For PostgreSQL(或 Navicat Premium)16:

    • 点击“实体化视图”按钮,将显示实体化对象列表,在对象工具栏中点击“+ 新建实体化视图”,将打开视图设计器:

    • 在定义编辑器中输入上述语句的 SELECT 部分:

    • 我们可以点击“预览”按钮来检查语句是否可以如期运行:

    • 点击“保存”按钮,完成创建新的实体化视图。这将会弹出一个提示输入实体化视图名称的对话框,根据上面的 CREATE MATERIALIZED VIEW 语句中的名称,我们将它命名为“mv_category_revenue”:

    • 点击对话框中的保存按钮,Navicat 会将实体化视图名称从“无标题”改为我们提供的名称。同时也会将新建的实体化视图添加到左侧导航窗格的实体化视图列表中:

总结

在非实时数据场景下,PostgreSQL 实体化视图是一个优化查询性能的有用工具。通过预计算和存储复杂查询的结果,实体化视图可以显著提高分析和报告任务的响应时间。本教程中,我们学习了如何为 DVD Rental 数据库创建实体化视图,并展示了在真实场景中的实际应用。

往期回顾 

Navicat 16 已支持 Redis

Navicat 16 已支持华为云 GaussDB

Navicat 16 已支持蚂蚁集团 OceanBase 全线数据库

Navicat 常见技术教程

Navicat 入选中国信通院发布的《中国数据库产业图谱(2023)》 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/403741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

T-Dongle-S3开发笔记——分区表

参考: ESP32之 ESP-IDF 教学(十三)—— 分区表_esp32分区表-CSDN博客 分区表 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 分区表是 ESP32 划分内部 flash 闪存的清单,它将 flash 划分为多个不同功能的区域用于…

【前端素材】推荐优质后台管理系统inspina平台模板(附源码)

一、需求分析 后台管理系统是一个集成了多种功能模块的系统,通过这些模块的协同工作,实现对网站、应用程序或系统的全面管理和控制。管理员通过后台管理系统可以高效地管理用户、内容、数据、权限等方面的工作,确保系统的正常运行和安全性。…

MariaDB落幕和思考

听过MySQL的基本也都知道 MariaDB。MariaDB由MySQL的创始人主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。传闻MySQL的创始人担心…

【火猫TV】DOTA2-喀山未来运动会:LGD 战队2-0击败Neon

在2月22号进行的俄罗斯喀山未来运动会DOTA2项目淘汰赛上,LGD 战队以2-0击败Neon战队晋级下一轮。双方对阵第二局,LGD对线期三路优,中期圣堂小鱼越打越肥,轻松拿下了比赛的胜利,以下是对决战报。转载:火猫TV资讯https://www.huomaotv.com/ LGD战队在天辉,阵容是小鱼、圣堂、玛尔…

使用ffmpeg实现视频片段截取并保持清晰度

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i input.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-ve…

Python Web开发记录 Day2:CSS

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 二、CSS1、CSS-初始入门①快速了解②CSS应用方式…

SpringCloud(14)之SpringCloud Consul

我们知道 Eureka 2.X 遇到困难停止开发了,所以我们需要寻找其他的替代技术替代Eureka,这一小 节我们就讲解一个新的组件Consul。 一、Consul介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式…

横空出世,Bright Data 低代码数据平台,即将颠覆你的认知!

大家好,我是锋哥,最近接了个监控平台的私活项目。由于监控公开的站点太多,在我无从下手迷茫之际,竟然无意中发现了这个宝藏级低代码数据平台 - 亮数据。功能强大,性能炸裂! 传统开发 以前我们开发这种监控…

文件上传漏洞--Upload-labs--Pass10--双写绕过

一、什么是双写绕过 顾名思义,双写绕过就是双写文件后缀名来进行绕过,如:test.php 双写后为 test.pphphp。通常情况下双写绕过用于绕过源代码中的 str_ireplace()函数。 二、双写绕过原理 1、首先进行代码审计,源代码中有黑名单…

HTML5 Canvas 限定文本区域大小,文字自动换行,自动缩放

<!DOCTYPE html> <html> <body><h1>HTML5 Canvas 限定文本展示范围、自动计算缩放字体大小</h1><div id"tips">0</div> <div id"content">良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐…

六、回归与聚类算法 - 岭回归

目录 1、带有L2正则化的线性回归 - 岭回归 1.1 API 2、正则化程度的变化对结果的影响 3、波士顿房价预测 线性回归欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、带有L2正则化的线性回归 - 岭回…

ktorm + ktorm-ksp + springboot搭建RBAC后台模板 实践

本文代码仓库&#xff1a;https://github.com/okfanger/ktorm-ksp-springboot-demo 0. 前言 使用kotlin写springboot是前几个月突然萌生的想法&#xff0c;起因是看到了 ktorm 官网里的一个截图&#xff1a; 没错&#xff0c;你可以一眼看出这款 orm 框架的特点&#xff0c…

测斜孔造孔与测斜管安装有什么要求

在工程测量中&#xff0c;测斜孔的造孔和测斜管的安装是两个重要的环节&#xff0c;它们直接关系到测量结果的准确性和可靠性。为了确保测斜孔造孔和测斜管安装的质量&#xff0c;需要遵循一系列严格的要求和规范。 测斜孔的造孔应遵循以下要求&#xff1a;钻孔应呈铅直布置&am…

探索数据宝藏:填写《全国数据资源调查》的乐趣与技巧

2月19日&#xff0c;国家数据局等四部门发布关于开展全国数据资源调查的通知。通知提出&#xff0c;为贯彻落实《数字中国建设整体布局规划》工作部署&#xff0c;摸清数据资源底数&#xff0c;加快数据资源开发利用&#xff0c;更好发挥数据要素价值&#xff0c;国家数据局、中…

袋鼠云产品功能更新报告09期|更全面,更多样,更高效

欢迎阅读袋鼠云09期产品功能更新报告。在此期报告中&#xff0c;我们秉持创新与优化并重的理念&#xff0c;对产品进行了深度打磨与全面升级。每一处细节的改进&#xff0c;都是我们对卓越品质的不懈追求&#xff0c;期待这些新功能能助力您的业务运营与发展&#xff0c;让数字…

openssl 生成nginx自签名的证书

1、命令介绍 openssl req命令主要的功能有&#xff0c;生成证书请求文件&#xff0c; 查看验证证书请求文件&#xff0c;还有就是生成自签名证书。 主要参数 主要命令选项&#xff1a; -new :说明生成证书请求文件 -x509 :说明生成自签名证书 -key :指定已…

ChatGPT 是什么

文章目录 一、ChatGPT 是什么二、ChatGPT的发明者三、ChatGPT的运作方式四、ChatGPT的技术五、ChatGPT的优势六、ChatGPT的局限性七、ChatGPT的应用八、ChatGPT的未来九、总结 一、ChatGPT 是什么 OpenAI的ChatGPT&#xff0c;即Chat Generative Pre-Trained Transformer&…

React 模态框的设计(二)

自定义组件是每个前端开发者必备的技能。我们在使用现有框架时难免有一些超乎框架以处的特别的需求&#xff0c;比如关于弹窗&#xff0c;每个应用都会用到&#xff0c;但是有时我们使用的框架中提供的弹窗功能也是功能有限&#xff0c;无法满足我们的应用需求&#xff0c;今天…

基于springboot+vue的智慧社区系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

C++入门学习(三十三)函数的定义,两数之和函数作为例子

为什么使用函数&#xff1a;将一些重复的代码封装&#xff0c;方便以后的使用&#xff0c;直接调用即可。 先给一个例子&#xff1a; // 函数返回整数类型 int addNumbers(int a, int b) { // 函数体 int sum a b; return sum; // 返回计算得到的和 } 返回值类型&…
最新文章