首頁 資料庫 mysql教程 PostgreSQL 9.3物化视图使用

PostgreSQL 9.3物化视图使用

Jun 07, 2016 pm 05:32 PM

物化视图在Oracle里面是很早就内置的一个功能,而PostgreSQL也很早就将功能代码做出来,方式是类似create table as....,只是一直

物化视图在Oracle里面是很早就内置的一个功能,而PostgreSQL也很早就将功能代码做出来,方式是类似create table as....,只是一直没有内置,9.3版本终于将此作为一个内置的功能点来使用,下面分享下最新版本的物化视图使用。

目前postgres9.3在官网上有4个安装包,分别是9.3.0(stable version)、9.3.0 beta1、9.3.0betal2和9.3.0rc版本(release candidate version),所以我们下载稳定的9.3.0 stable版本。

下载地址:
安装略。

一、语法

CREATE MATERIALIZED VIEW table_name [ (column_name [, ...] ) ] [ WITH ( storage_parameter [= value] [, ... ] ) ] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ]

二、说明
storage_parameter是存储参数,诸如填充因子(fillfactor)等,tablespace可以指定表空间,比较关键的是后面的as query with [no] data,后面示例描述

三、示例

1.创建基础表

[postgres@primary ~]$ psql psql (9.3.0) Type "help" for help. postgres=# create table test_kenyon(id int,vname text); CREATE TABLE postgres=# insert into test_kenyon select generate_series(1,20),'kenyon good boy'||generate_series(1,20); INSERT 0 20 postgres=# select * from test_kenyon ; id | vname ----+------------------- 1 | kenyon good boy1 2 | kenyon good boy2 3 | kenyon good boy3 4 | kenyon good boy4 5 | kenyon good boy5 6 | kenyon good boy6 7 | kenyon good boy7 8 | kenyon good boy8 9 | kenyon good boy9 10 | kenyon good boy10 11 | kenyon good boy11 12 | kenyon good boy12 13 | kenyon good boy13 14 | kenyon good boy14 15 | kenyon good boy15 16 | kenyon good boy16 17 | kenyon good boy17 18 | kenyon good boy18 19 | kenyon good boy19 20 | kenyon good boy20 (20 rows)

2.创建物化视图

postgres=# create materialized view mv_test_kenyon as select * from test_kenyon where id > 10; SELECT 10 postgres=# select * from mv_test_kenyon; id | vname ----+------------------- 11 | kenyon good boy11 12 | kenyon good boy12 13 | kenyon good boy13 14 | kenyon good boy14 15 | kenyon good boy15 16 | kenyon good boy16 17 | kenyon good boy17 18 | kenyon good boy18 19 | kenyon good boy19 20 | kenyon good boy20 (10 rows) postgres=# \d+ List of relations Schema | Name | Type | Owner | Size | Description --------+----------------+-------------------+----------+-------+------------- public | mv_test_kenyon | materialized view | postgres | 16 kB | public | test_kenyon | table | postgres | 16 kB | (2 rows) postgres=# \d mv_test_kenyon Materialized view "public.mv_test_kenyon" Column | Type | Modifiers --------+---------+----------- id | integer | vname | text | --size有大小(默认空表是8kb,而这里是16kb)说明存储了数据,有相应的物理文件,并且有类似表的结构

3.物化视图更新

postgres=# insert into test_kenyon values(21,'bad boy'); INSERT 0 1 postgres=# insert into test_kenyon values(22,'bad boy2'); INSERT 0 1 postgres=# select * from test_kenyon where id>20; id | vname ----+---------- 21 | bad boy 22 | bad boy2 (2 rows) postgres=# select * from mv_test_kenyon where id>20; id | vname ----+------- (0 rows) --物化视图的数据没有刷新过来 --刷新物化视图数据 postgres=# refresh materialized view mv_test_kenyon; REFRESH MATERIALIZED VIEW postgres=# select * from mv_test_kenyon where id>20; id | vname ----+---------- 21 | bad boy 22 | bad boy2 (2 rows) --使用with no data刷新 postgres=# insert into test_kenyon values(32,'bad boy3'); INSERT 0 1 postgres=# select * from mv_test_kenyon where id>20; id | vname ----+---------- 21 | bad boy 22 | bad boy2 (2 rows) postgres=# refresh materialized view mv_test_kenyon with no data; REFRESH MATERIALIZED VIEW postgres=# \d+ List of relations Schema | Name | Type | Owner | Size | Description --------+----------------+-------------------+----------+------------+------------- public | mv_test_kenyon | materialized view | postgres | 8192 bytes | public | test_kenyon | table | postgres | 16 kB | (2 rows) postgres=# select * from mv_test_kenyon; ERROR: materialized view "mv_test_kenyon" has not been populated HINT: Use the REFRESH MATERIALIZED VIEW command.

使用了with no data刷新后会导致物化视图里面的数据清除干净,并使物化视图不可用,如果需要继续使用,需要使用REFRESH MATERIALIZED VIEW view_name来恢复。

4.删除物化视图

postgres=# drop materialized view mv_test_kenyon ; DROP MATERIALIZED VIEW postgres=# --如果有其他约束在物化视图上,需要加cascade来级联删除

四、应用场景和优劣势
可以将复杂的SQL写成视图来调用,并可增大数据的安全性
另外物化视图与普通视图比因为直接扫描数据,通常扫描的数据更少,在有索引的支持下,效率更高,,网络消耗也更少,特别是跨DB,跨服务器的查询
与普通视图相比的劣势是数据需要不定时地刷新才能获取到最实时的数据。

、总结
1.物化视图当前是全量刷新,暂不支持增量刷新
2.刷新参数with data是全量更新物化视图内容,且是默认参数;with no data会清除物化视图内容,释放物化视图所占的空间,并使物化视图不可用

六、参考:
http://wiki.postgresql.org/wiki/Materialized_Views

相关阅读:

PostgreSQL删除表中重复数据行

PostgreSQL数据库连接池PgBouncer的搭建

Windows平台编译 PostgreSQL

PostgreSQL备份心得笔记

PostgreSQL 的详细介绍:请点这里
PostgreSQL 的下载地址:请点这里

linux

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1672
14
CakePHP 教程
1428
52
Laravel 教程
1333
25
PHP教程
1277
29
C# 教程
1257
24
MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

說明InnoDB重做日誌和撤消日誌的作用。 說明InnoDB重做日誌和撤消日誌的作用。 Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

初學者的MySQL:開始數據庫管理 初學者的MySQL:開始數據庫管理 Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

解釋InnoDB緩衝池及其對性能的重要性。 解釋InnoDB緩衝池及其對性能的重要性。 Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL與其他數據庫:比較選項 MySQL與其他數據庫:比較選項 Apr 15, 2025 am 12:08 AM

MySQL適合Web應用和內容管理系統,因其開源、高性能和易用性而受歡迎。 1)與PostgreSQL相比,MySQL在簡單查詢和高並發讀操作上表現更好。 2)相較Oracle,MySQL因開源和低成本更受中小企業青睞。 3)對比MicrosoftSQLServer,MySQL更適合跨平台應用。 4)與MongoDB不同,MySQL更適用於結構化數據和事務處理。

MySQL:結構化數據和關係數據庫 MySQL:結構化數據和關係數據庫 Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

學習MySQL:新用戶的分步指南 學習MySQL:新用戶的分步指南 Apr 19, 2025 am 12:19 AM

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

See all articles