PostgreSQL 的实体化视图介绍

news2024/12/23 18:07:26

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.coloradmin.cn/o/1465965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盘点全网好用的ai伪原创工具

在信息内容发展的今天,写作在我们每个人的生活当中息息相关。可能写作对于有的人来说很简单,但对于有些人来说可能也会很难,幸运的是,我们在这个技术发达的今天,对于很多难题都是可以迎刃而解的,即使对于那…

arcgisPro制图输出

1、设置地图底图 2、导入数据 3、 设置图形颜色,如下:右键“浙江省”数据层,选择符号系统 4、在右侧可看到打开的符号系统栏,进行如下设置: 5、移除“其他所有值”项,如下: 6、设置图形轮廓,如下…

300分钟吃透分布式缓存-11讲:MC如何淘汰冷key和失效key?

淘汰策略 Mc 作为缓存组件,意味着 Mc 中只能存储访问最频繁的热数据,一旦存入数据超过内存限制,就需要对 Mc 中的冷 key 进行淘汰工作。Mc 中的 key 基本都会有过期时间,在 key 过期后,出于性能考虑,Mc 并…

创新性3D数据合成模型,微软推出EgoGen

随着AR、VR等设备的广泛应用,第一人称的应用开始增多。但在研发方面面临不同的挑战,例如,图像模糊、视觉混乱、遮挡更严重等,给视觉模型的训练带来重大挑战。 一方面,人工标注真实第一视角数据集,来培训深度学习模型的成本和难度都很高。另一…

Python基于PyQt打包一个exe应用程序

一、环境搭建 1、安装python地三方库 pip install PyQt5 pip install pyqt5-tools pip install pyinstaller 2、下载并安装Qt Designer 下载地址:https://build-system.fman.io/qt-designer-download 二、QT Design使用 1、控件布局 2、布局好之后保存文件,Ctrl+s 保存为…

时域系统到频域响应的直观解析及数学推导

课本里经常有已知系统时域的差分方程,求系统的频率响应这样的题,老师会讲怎么带公式进去解决,怎么查表解决,但我们总时无法直观地理解这两种转换的特殊关联在哪里,这篇文章以FIR滤波器为例,不仅列出了课本里…

Nginx网络服务二-----(虚拟机和location)

一、HTTP设置 1.设置虚拟主机 1.1Nginx 基于域名---虚拟主机 include /apps/nginx/conf.d/*.conf; 1.2Nginx 基于端口---虚拟主机 在做了域名的基础上,按照以下步骤继续 1.3Nginx 基于IP---虚拟主机 2.server下的root root路径格式 指定文件的路径 url …

集合、List、Set、Map、Collections、queue、deque

概述 相同类型的数据进行统一管理操作,使用数据结构、链表结构,二叉树 分类:Collection、Map、Iterator 集合框架 List接口 有序的Collection接口,可以对列表中的每一个元u尿素的插入位置进行精确的控制,用户可以根…

【Django】Django自定义后台表单——对一个关联外键对象同时添加多个内容

以官方文档为例: 一个投票问题包含多个选项,基本的表单设计只能一个选项一个选项添加,效率较低,如何在表单设计中一次性添加多个关联选项? 示例代码: from django.contrib import adminfrom .models impo…

nios ii开发随笔

错误一: d:/intelfpga/17.1/nios2eds/bin/gnu/h-x86_64-mingw32/bin/../lib/gcc/nios2-elf/5.3.0/../../../../../H-x86_64-mingw32/nios2-elf/bin/ld.exe: test.elf section .text will not fit in region ram_oc_xzs d:/intelfpga/17.1/nios2eds/bin/gnu/h-x86_6…

CUDA自学笔记001 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

CUDA编程模型 我们使用CUDA_C语言进行CUDA编程, 1,CUDA编程模型提供了线程抽象接口用于控制GPU中的线程 2,CUDA编程模型提供了内存访问控制,我们可以实现主机和GPU设备内存的控制,我们可以实现CPU和GPU之间内存的数据传…

ROS1查看版本

目录 方法一方法二 方法一 rosversion -d方法二

关于Springboot下静态资源访问的问题

1.答案: 在配置静态资源的时候,springboot默认了一些资源路径,默认情况下,Spring Boot会映射/**到/src/main/resources/static (或/public、/resources、/META-INF/resources)路径上。 这是我的项目结构图: 这样就可…

【C++私房菜】面向对象中的多重继承以及菱形继承

文章目录 一、多重继承1、多重继承概念2、派生类构造函数和析构函数 二、菱形继承和虚继承2、虚继承后的构造函数和析构函数 三、has-a 与 is-a 一、多重继承 1、多重继承概念 **多重继承(multiple inheritance)**是指从多个直接基类中产生派生类的能力…

基于SpringBoot的产业园区智慧公寓管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

电路设计(26)——速度表的multisim仿真

1.设计要求 设计一款电路,能够实时显示当前速度。 用输入信号模拟行驶的汽车,信号频率的1hz代表汽车速度的1m/s。最后速度显示,以km/h为单位。 2.电路设计 当输入信号频率为40HZ时,显示的速度应该为144KM/h,仿真结果为…

IDEA Debug框的 show execution point按钮没了

在这里右键: Add Action: 搜索添加: 本文由博客一文多发平台 OpenWrite 发布!

[OpenAI]继ChatGPT后发布的Sora模型原理与体验通道

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

【SelectIO】bitslice原语学习记录

基本概念 在Ultrascale (plus)系列上的FPGA中,Xilinx引入了bitslice硬核,它取代了7系列上的IDELAYCTRL/IODELAY/IOSERDES/IODDR系列硬核,用于为HP(High Performance)类型Bank上的IO接口提供串并转化、信号延时、三态控…

制造业客户数据安全解决方案(数据防泄密需求分析)

机械行业是历史悠久的工业形式,与国民经济密切相关,属于周期性行业,是我国最重要的工业制造行业之一。即使网络经济与IT信息技术在世界范围内占据主导地位,依然离不开一个发达的、先进的物质基础,而机械行业正是为生成…