Indexed (materialized) views in SQL Server,different with Oracle (materialized) views
Thanks to
MS sql could have materialized views ,similar with oracle MVs, using indexed views.
what is going on ? are they same thing ?
Here we go :
(1) general demo tables and rows
/****************************************************
AboutSQLServer.com blog
Written by Dmitri Korotkevitch
"Indexed views"
2011-03-24
*****************************************************/
set nocount on
go
set ANSI_NULLS on
set QUOTED_IDENTIFIER on
go
create table dbo.Clients
(
ClientId int not null,
ClientName varchar(32),
constraint PK_Clients
primary key clustered(ClientId)
)
go
create table dbo.Orders
(
OrderId int not null identity(1,1),
Clientid int not null,
OrderDate datetime not null,
OrderNumber varchar(32) not null,
Amount smallmoney not null,
Placeholder char(100) not null
constraint Def_Orders_Placeholder
default 'a',
constraint PK_Orders
primary key clustered(OrderId)
)
go
;with CTE(Num)
as
(
select 0
union all
select Num + 1
from CTE
where Num < 100
)
insert into dbo.Clients(Clientid, ClientName)
select Num, 'Client ' + convert(varchar(32),Num)
from CTE
option (MAXRECURSION 0)
go
;with CTE(Num)
as
(
select 0
union all
select Num + 1
from CTE
where Num < 100000
)
insert into dbo.Orders(Clientid, OrderDate, OrderNumber, Amount)
select
Num % 100,
DATEADD(day,-Num % 365, GetDate()),
'Order: ' + convert(varchar(32),Num),
Num % 100
from CTE
option (MAXRECURSION 0)
go
(2) -- no views select query
select
c.ClientId, c.ClientName,
count(o.OrderId) as [NumOfOrders],
sum(o.Amount) as [TotalAmount]
from
dbo.Clients c join dbo.Orders o on
c.ClientId = o.ClientId
group by
c.ClientId, c.ClientName
having
sum(o.Amount) > 90000
go
(9 row(s) affected)
Table 'Clients'. Scan count 0, logical reads 200, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Orders'. Scan count 1, logical reads 1823, physical reads 2, read-ahead reads 1798, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(1 row(s) affected)
(3) creating indexing view
create view dbo.vClientWithOrders(
ClientId, ClientName,
NumOfOrders, TotalAmount
)
with schemabinding
as
select
c.ClientId, c.ClientName,
count_big(*) as NumOfOrders,
sum(o.Amount) as TotalAmount
from
dbo.Clients c join dbo.Orders o on
c.ClientId = o.ClientId
group by
c.ClientId, c.ClientName
go
create unique clustered index
IDX_vClientWithOrders_ClientId
on dbo.vClientWithOrders(ClientId)
go
--run again same query
(9 row(s) affected)
Table 'vClientWithOrders'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
-- only query from the view
select *
from dbo.vClientWithOrders
where TotalAmount > 90000
go
(9 row(s) affected)
Table 'vClientWithOrders'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(4) With the standard edition of SQL Server, you can use ---with (noexpend)
select *
from dbo.vClientWithOrders with(noexpend)
where TotalAmount > 90000
go
and get the same result as above one
so,. let close it with MS web site words
Creating a unique clustered index on a view improves query performance because the view is stored in the database in the same way a table with a clustered index is stored. The query optimizer may use indexed views to speed up the query execution. The view does not have to be referenced in the query for the optimizer to consider that view for a substitution.
Indexed (materialized) views in SQL Server,different with Oracle (materialized) views的更多相关文章
- 在64位SQL Server中创建Oracle的链接服务器
当我们同时使用SQL Server和Oracle来存储数据时,经常会用到跨库查询.为了方便使用跨库查询,一个最好的办法就是通过创建链接服务器来实现.既可以在SQL Server中创建Oracle的链接 ...
- 从 Microsoft SQL Server 迁移到 Oracle
来源于:http://www.oracle.com/technetwork/cn/database/migration/sqlserver-095136-zhs.html Oracle SQL Dev ...
- SQL SERVER 2008向ORACLE 11G迁移示例
来源于:http://www.cnblogs.com/hiizsk/ 由SQL SERVER 2008向ORACLE 11G迁移过程记录之一-表 使用Oracle Sql Developer将SQL ...
- 通过SQL Server 2008 访问Oracle 10g
原文地址:http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.html 之前写过一篇关于SQL ...
- 在64位SQL Server中创建Oracle的链接服务器 Link Server
有时候我们希望在一个sqlserver下访问另一个sqlserver数据库上的数据,或者访问其他oracle数据库上的数据,要想完成这些操作,我们首要的是创建数据库链接. 数据库链接能够让本地的一个s ...
- 【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件, 需要用不同的驱动程序来实现. 在64位的机 ...
- 【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据
从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件,需要用不同的驱动程序来实现. 在32位的机器 ...
- SQL Server 2008创建oracle链接服务器(心得)
操作系统是32位的情况下,曾经没费太多时间创建好了到oracle的链接服务器.主要要点就是: 1.安装oracle精简客户端.当时我用的是版本比较低的“oracle9i310-客户端简化版”,安装好了 ...
- 大规模数据 从SQL SERVER导入到ORACLE方法
来源于:http://blog.csdn.net/iitkd/article/details/40394789 来源:一个7G的SQL SERVER .bak文件要导入到Oracle中,经过实验,完成 ...
随机推荐
- 红帽RHCE培训-课程1笔记目录
目录 1.环境变量 env 2.man手册mandb;系统日志/var/log/messages 3.重定向和管道> 2> &> | tee 4.mail mail -s 标 ...
- zabbix监控服务部署脚本
搭建平台脚本: #!/bin/bash #zabbix监控服务部署 #脚本使用前提:yum搭建,nginx-1.12.2源码包,zabbix-3.4.4源码包,要求源码包尽量在单一目录下,最好在默认管 ...
- iOS-image图片旋转方向
https://blog.csdn.net/qq_36557133/article/details/85760469 最近在做项目的时候发现资源包内的图片的方向不对,但也不想让UI切一个新图,所以需要 ...
- eclipse配置class注释模板
/** * Copyright (c) ${year}, All Rights Reserved. * */ ${filecomment} ${package_declaration} ${typec ...
- ztree-拖拽(排序树)
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeDrag / onDrag / bef ...
- maven搭建父子项目
父工程:父工程又称为父控制器,只是一个简单的工程,不能单独运行.作用是将子模块跟子工程聚合在一起.父控制器中的pom.xml配置,在子模块跟子工程中都可以被继承. 子工程:项目中创建的具有业务逻辑并且 ...
- @Value注解的使用
前提它需要在spring 管理的Bean中有效 (如@Service...) #{...} 此方式可以使用 SpEL 表达式如 #{30-15} ${...} 可以获取配置文件中的值 如 ${jwt. ...
- 使用阿里的EasyExcel遇到的一些坑(NoSuchMethodError异常)
引入eayexcel依赖的时候已经包含了poi依赖
- 记springboot 实体类String转Date类型的坑
前端传入一个String的时间字符串如:2019-07-18 23:59:59 后端实体类要在头顶加注解: @DateTimeFormat(pattern = "yyyy-MM-dd HH: ...
- linux理论知识点(用于考试)
ps:为其十天左右的linux培训即将结束了,未雨绸缪,为了更好的通过之后的考试,提前多看些考试题和知识点.这是在chinaunix论坛看到的一个帖子,贴来分享. 原文地址:[http://bbs.c ...