當前位置:首頁 » 編程語言 » 物化視圖詳解sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

物化視圖詳解sql

發布時間: 2023-02-16 06:08:41

sqlserver 物化視圖問題

可以的。貼一片網上的資料給你,具體參考地址:http://happinessmoon.javaeye.com/blog/364011
物化視圖 sql server
物化視圖,所謂視圖實際上是不存儲物理信息的(同表相區別,表存儲實際的數據和表的索引信息等。),視圖僅僅存儲 一個select語句而已。而物化視圖就要視圖也存儲實際的數據,這種實際數據,就是索引。oracle 8imssqlserver2000中引入的。比如oracle的函數索引和sqlserver2000的索引視圖都是物化視圖。原因是這種視圖能夠顯著提高性能,舉個例子
一個表:

create table mytable (id int not null,name varchar(20) not null)
create index idx_mytable on mytable.name
當我們查詢的時候,

select * from mytable where name like 'j%',

優化器能夠使用索引來提高性能,然而我們遇到這種情況就不能使用索引了,如:
select * from mytable where name like '%bing%'
或者
select * from mytable where substring(name,1,5)='jiang'
這樣的情況不能使用索引
但引入物化視圖就不同了
create view myview(vid,vname) as select id,substring(name,1,5) from myview.
然後再vname上建立索引即可顯著提高查詢性能。
oracle的函數索引亦是如此。
create index idx_mytable on mytable(upper(name))
--
就是這樣的

http://book.51cto.com/art/200710/57893.htm

1.6.2 物化視圖

SQL Server 2005增強了索引化視圖,也叫做物化視圖。現在你可以使用一個能索引化的視圖擴展集合了。在SQL Server中還有一些可以被索引化的視圖類型,如使用下列選項的視圖:

外部連接(Outer Joins)。
級聯集合(Scalar Aggregates)。
ROLLUP和CUBE。

資料庫管理員或者開發者在視圖上創建索引時,這個視圖就被物化(執行)了,並且結果集被永久地保存在唯一聚簇索引(Clustered Index)中,保存方式與一個有聚簇索引的表的保存方式相同。可以在第一級唯一聚簇索引創建之後添加非聚簇的第二級索引。

索引視圖有以下兩個優點。

減除了為引用視圖的查詢動態建立結果集的管理開銷。
優化人員可以在查詢中使用視圖索引,而不需要在FROM子句中直接指定視圖。
引用索引化視圖中的相關列的現有查詢可以受益於提高了的在索引化視圖中獲取數據的效率,而且不需要重新編寫代碼。關於它們更多的介紹,請見第3章。代碼舉例,請見第6章「代碼章節」。

⑵ 什麼是Oracle的物化視圖

物化視圖看成是, 一個定時運行的計算JOB+一個存計算結果的表 物化視圖 實質上就是表 只不過會定時刷新物化視圖是包括一個查詢結果的資料庫對像,它可以說是遠程數據的的本地副本,或者用來生成基於數據表求和的匯總表。物化視圖存儲基於遠程表的數據,也可以稱為快照。 物化視圖可以查詢表,視圖和其它的物化視圖。 通常情況下,物化視圖被稱為主表(在復制期間)或明細表(在數據倉庫中)。 對於復制,物化視圖允許你在本地維護遠程數據的副本,這些副本是只讀的。如果你想修改本地副本,必須用高級復制的功能。當你想從一個表或視圖中抽取數據時,你可以用從物化視圖中抽取。 對於數據倉庫,創建的物化視圖通常情況下是聚合視圖,單一表聚合視圖和連接視圖。本篇我們將會看到怎樣創建物化視圖並且討論它的刷新選項。 在復制環境下,創建的物化視圖通常情況下主鍵,rowid,和子查詢視圖。1.主鍵物化視圖: 下面的語法在遠程資料庫表emp上創建主鍵物化視圖 SQL> CREATE MATERIALIZED VIEW mv_emp_pk REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/48 WITH PRIMARY KEY AS SELECT * FROM emp@remote_db; Materialized view created. 注意:當用FAST選項創建物化視圖,必須創建基於主表的視圖日誌,如下: SQL> CREATE MATERIALIZED VIEW LOG ON emp; Materialized view log created.2.Rowid物化視圖 下面的語法在遠程資料庫表emp上創建Rowid物化視圖 SQL> CREATE MATERIALIZED VIEW mv_emp_rowid REFRESH WITH ROWID AS SELECT * FROM emp@remote_db; Materialized view log created.3.子查詢物化視圖 下面的語法在遠程資料庫表emp上創建基於emp和dept表的子查詢物化視圖 SQL> CREATE MATERIALIZED VIEW mv_empdept AS SELECT * FROM emp@remote_db e WHERE EXISTS (SELECT * FROM dept@remote_db d WHERE e.dept_no = d.dept_no) Materialized view log created. REFRESH 子句 [refresh [fastcompleteforce] [on demand commit] [start with date] [next date] [with {primary keyrowid}]] Refresh選項說明:a. oracle用刷新方法在物化視圖中刷新數據. b. 是基於主鍵還是基於rowid的物化視圖 c. 物化視圖的刷新時間和間隔刷新時間Refresh方法-FAST子句 增量刷新用物化視圖日誌(參照上面所述)來發送主表已經修改的數據行到物化視圖中.如果指定REFRESH FAST子句,那麼應該對主表創建物化視圖日誌 SQL> CREATE MATERIALIZED VIEW LOG ON emp; Materialized view log created. 對於增量刷新選項,如果在子查詢中存在分析函數,則物化視圖不起作用。Refresh方法- COMPLETE子句 完全刷新重新生成整個視圖,如果請求完全刷新,oracle會完成 完全刷新即使增量刷新可用。Refresh Method – FORCE 子句 當指定FORCE子句,如果增量刷新可用Oracle將完成增量刷新,否則將完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force選項是默認選項主鍵和ROWD子句 WITH PRIMARY KEY選項生成主鍵物化視圖,也就是說物化視圖是基於主表的主鍵,而不是ROWID(對應於ROWID子句). PRIMARY KEY是默認選項,為了生成PRIMARY KEY子句,應該在主表上定義主鍵,否則應該用基於ROWID的物化視圖. 主鍵物化視圖允許識別物化視圖主表而不影響物化視圖增量刷新的可用性。 Rowid物化視圖只有一個單一的主表,不能包括下面任何一項:n Distinct 或者聚合函數. n Group by,子查詢,連接和SET操作刷新時間 START WITH子句通知資料庫完成從主表到本地表第一次復制的時間,應該及時估計下一次運行的時間點, NEXT 子句說明了刷新的間隔時間. SQL> CREATE MATERIALIZED VIEW mv_emp_pk REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 3 WITH PRIMARY KEY AS SELECT * FROM emp@remote_db; Materialized view created.在上面的例子中,物化視圖數據的第一個副本在創建時生成,以後每三天刷新一次.總結物化視圖提供了可伸縮的基於主鍵或ROWID的視圖,指定了刷新方法和自動刷新的時間。

⑶ 什麼是物化視圖,如何定義,如何使用,請舉例說明

通俗的講,普通視圖的物理存儲在源表空間中,而物化視圖在本地創建新的物理存儲,存儲的結構根據創建物化視圖的Sql來確定。這樣查詢普通視圖相當於在源表中進行查詢,而查詢物化視圖相當於本地表查詢。既然是本地存儲,物化視圖就需要有數據的同步方式,通過對源表是否包含更新日誌來確定物化視圖能否執行增量同步,或者只能進行全表同步。同步進行的實際操作是刪除行並重新插入行。
定義舉例: Create Materialized View As Select * from a inner join b on a.id = b.aid;
比較普通視圖的建立: Create View As Select * from a inner join b on a.id = b.aid;
同步的設置,你查詢一下物化視圖的相關技術說明吧。網上內容很多。

⑷ 如何在線修改全刷新的物化視圖的底層SQL

如何在線修改全刷新的物化視圖的底層SQL
物化視圖建立的時候可以定義刷新方式,一般有: refresh fast 和 refresh complete之分,前者是只更新主表中變化的記錄(主表必須建立materialized view log),而後者是把MV裡面的數據全部更新。此外,更新方式還可以有:on demand, on commit, on force之分. on commit是及時更新。其實用戶創建materialized view的時候可以指定更新頻率,給你個例子

CREATE Materialized View mv_terminal
REFRESH FAST
NEXT SYSDATE + 30/(24*60)
AS
SELECT * FROM ........
這個MV每30分鍾刷新一次,只刷新改變的數據

⑸ Mssql 如何創建物化視圖 比如: select * FROM u_sale_m left join u_sale_c 這個語句如何創建

create or replace view 視圖名 as
select * FROM u_sale_m left join u_sale_c
運行完
你再查詢select * from 視圖名 就可以

⑹ sql server中什麼是物化視圖或者索引視圖。怎樣才能看到效果怎麼能看到他和普通視圖的區別。

你好 :
什麼是物化視圖或者索引視圖
===》
你在你的索引上建立聚集索引的時候 你的視圖就叫 索引視圖。。
建立聚集索引的視圖將不再是個虛擬表 而是一個實實在在的表。
會有相應的數據頁存儲你的視圖上的數據

他們的區別就是
視圖一個是虛擬表 沒有真實存在的數據 索引視圖則相反,這個我上面說了。
還有一個區別就是 索引視圖會影響其基表的查詢 (這個你可以看我這篇文章:http://blog.csdn.net/feixianxxx/archive/2009/11/11/4798287.aspx)

⑺ sql server中什麼是物化視圖或者索引視圖。怎樣才能看到效果怎麼能看到他和普通視圖的區別。

物化視圖
相當於某一時刻的數據快照
常用於
數據倉庫
的查詢,因為數據倉庫的數據一般較穩定
所以,當物化視圖相關的表有更新時,應該重新執行物化視圖
以得到准確的數據快照
至於索引視圖,上面的人已經講清楚了

⑻ 分布式物化視圖在clickhouse如何實現

物化視圖在數據層面做指標大寬表有著舉足輕重的作用,分布式物化視圖是對物化視圖存儲的數據進行分布式讀取。

之前我們有一個介紹過物化視圖的文章,詳情請點擊:clickhouse物化視圖的應用,這里我們已經介紹過物化視圖是什麼,如何使用。

下面我們這里來介紹一下分布式物化視圖的使用。我們這里使用的是分布式clickhouse集群。版本是:20.3.10.75,下面我們就來詳解分布式物化視圖在clickhouse的使用。

1:首先我們還是來建立三個表。

2:分別在不同的節點插入數據,我這里有兩個節點,我們每個節點插入2條數據。 節點1如下:

節點2如下:

3:插入完數據之後,我們去每個節點查詢,因為我們需要讀所有的數據,則我們需要建一下分布式表來讀數據。下面是建分布式表的語句。

建立好上面的分布式表之後就能讀集群所有節點的數據了。我這里貼一下user表的所有數據。

4:上面是基礎的數據表,這里我們開始建物化視圖表。下面的sql是把用戶表,用戶信息表,綁定表進行組合成大寬表,下面的腳本我們是在每個節點上存了一份快照,實際業務中我們是寫數據到一個節點,不會一份數據存多份。我這里做例子就這么使用。

5:上面的物化視圖表我們建立好了,下面我們在物化視圖表上建分布式表。

好了,到這里我們已經可以通過物化視圖分布式表讀每個節點的物化視圖了,業務中我們基於物化視圖來做大寬表,讀取物化視圖分布式表是非常常見的。我之前記得之前clickhouse物化視圖在微信的應用這篇文章也是比較類似。

總結

⑼ 如何在線修改全刷新的物化視圖的底層SQL

如何在線修改全刷新的物化視圖的底層SQL
當你CREATE OR REPLACE VIEW SOME_VIEW AS SELECT ... 時,如果結構不變,物化視圖及其依賴對象不會失效。但這不能用於快速刷新的物化視圖。

-- 建立測試環境:
CREATE TABLE T (ID NUMBER PRIMARY KEY);

INSERT INTO T VALUES (1);
INSERT INTO T VALUES (2);

⑽ SQL之物化視圖和普通視圖

說得比較全面:
https://www.cnblogs.com/nmap/p/6724849.html

視圖:一張虛擬表,封裝了底層與數據表的介面,相當於一張表或多張表的數據結果集。視圖包括行和列,類似一個真實的表。
物化視圖:物化視圖是一種特殊的物理表,物化(materialize)視圖相對普通視圖而言進行定義的。
普通視圖:虛擬表,應用局限比較大,任何對視圖的查詢,oracle實際轉換為視圖SQL語句的查詢。

視圖一般分為普通視圖和物化視圖,物化視圖與普通視圖區別在於:
1、物化視圖需要進行刷新才會更新數據
2、物化視圖實際存儲數據,普通視圖只是定義了sql實際數據還是需要查詢源表
3、物化視圖可以創建索引

create materialized view [if not exists] table_name
[(column_name[,...])]
[with (storage_parameter[=value][,...])]
[tablespace tablespace_name]
as query
[with [NO] DATA]

本質:在sql查詢語句的基礎上封裝了視圖VIEW,基於SQL語句的結果集形成一張虛擬表。

比如刷視圖: refresh materialized view f_feature_detail

修改視圖一般是對原有視圖進行更新

DROP VIEW view_name

一個視圖其實是SELECT語句的集合,執行時會提前編譯好,可以反復使用。在底層執行順序的時候和SELECT語句是一樣:
1、FROM子句組裝數據
2、WHERE子句進行條件篩選
3、GROUP BY分組
4、使用聚集函數進行計算;
5、HAVING篩選分組;
6、計算所有的表達式;
7、SELECT 的欄位;
8、ORDER BY排序
9、LIMIT篩選

參考極客時間:SQL必知必會