⑴ 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必知必会