物化视图索引:视图索引

SQL Server 2000 程序设计学习笔记--第十章 创建视图 10.1 何谓视图
视图是由查询来定义其内容的虚拟表
10.2 创建及修改视图--使用T-SQL语句
create view
创建视图时应该注意的事项
1 在create view 语句中的select语句内不可使用into,order by ,compute以及compute by 等子句
2 只可以在目前的数据库中创建视图
3 一个视图最多可以参考1,024个列
4 确定视图所参考到的表格都是存在的,如果系统在创建视图的过程中,发现所指定要参考的表格如果不存在时,将会发生错误信息
5 当要创建巢装检视时,其镶套层次最高可达32层
6 无法将规则或DEFAULT与视图结合
7 无法在视图上定义全文检索查询
8 无法创建暂时的视图也无法为暂存表创建视图
创建视图后,其视图名称存储在sysobjects的系统表格中,视图中所定义的列的相关信息将会添加至syscolumns的系统表格中,视图依存性的相关信息则被添加至sysdepends的系统表格中。当第一次执行视图时,在程序快取中只会存储其查询树,每当用户对视图进行存取时,系统都会重新编译。
范例
--创建表格AUTHORS的视图
create view view1
as
select au_id,au_fname,au_lname from authors
go
--浏览仕途view1的内容
select * from view1
go
程序名称:EX-3.SQL
扩展
在建立视图时重新命名字段名称
--创建表格AUTHORS的视图
create view view1
as
select au_id as 新名字,au_fname as 新名字2,au_lname as 新名字3 from authors
go
以上调试通过
修改视图
ALTER VIEW
ALTER VIEW会无条件删除视图的所有索引
范例
--将原先创建的视图VIEW1,其查询条件仅限au_id为846-92-7186才显示,而不显示全部authors表格的内容
alter view view1
as
select au_id,au_fname,au_lname from authors where au_id='846-92-7186'
go
select * from view1
go
删除视图
删除视图时,此视图参考的表格和数据都不受影响
DROP VIEW {view}[,..n]
范例
--删除视图view_index
drop view view_index
go
将视图进行加密
在每一个数据库中都有一个syscomments系统表格记录在此数据库内的视图,存储过程,触发器以及条件限制等数据
范例
--建立一个加密的视图
create view authorview
with encryption
as
select * from authors
go
--查看一个已经加密的视图内容
exec sp_helptext 'authorview'
go
检查在视图内的数据异动是否合乎条件
with check option
使用T-SQL的CREATE VIEW语句创建视图时,如果加上with check option 子句,则会检查此视图内所修改或添加的记录是否合乎原来创建视图时的条件限制如不符合条件限制时,则会不执行修改或添加记录的操作
但是假如您在创建视图时没加上with check option 子句时,则修改记录时不会受到条
10.3 创建及修改视图--使用企业管理器
使用企业管理器添加视图
添加表时,按住ctrl可以多选
可以在别名位置处对字段名进行重新命名
排序编号项目可以指定多个排序字段
准则项目是用来设置字段的条件比如将进货日期字段的条件设置为">'1988/12/01'"
或...项目可以将字段条件设置多个时可以使用比如将进货日期字段的条件设置为">'1988-12-1'"也必须设置为"<'1999-12-31'"因此可以在或...项目中输入"<'1999-12-31'"
设置完成后点运行
也储存视图时点保存按钮
使用企业管理器修改视图
10.4 使用联合的视图
如果在视图中需要参考的表格不止一个,甚至是两个或者两个以上的表格先联合以后再进行查询
范例
use pubs
go
create view title_auth
as
select title_id,title from titles union select au_id,au_lname from authors
go
10.5创建视图索引
如果创建的视图所参考的表格内容不是经常改变,而且又必须经常使用此视图进行数据查询的操作时,您可以为此视图创建索引
创建索引最大的好处就是可以提高查询的效率
提高哪里查询的效率呢?
1 连接(join)与数据汇总查询
2 许多查询经常要执行的连接与汇总运算
3 决策支持工作负载
视图索引对于下列查询类型并没有提高查询效率
1 经常写入的OLTP系统
2 经常更新的数据库
3 未包含汇总或联合的查询
4 其索引键包含许多不同值的数据汇总
5 展开连接
因此,在创建视图索引时必须根据现有的表格之间的联合关系,考虑是否要创建视图索引
创建视图索引的条件
在创建视图索引时,您必须先创建聚集索引,当创建好聚集索引后才可以再创建其他非聚集索引
创建视图索引
范例
--将numeric_roundabort选项设置为off
set numeric_roundabort off
go
--将一些选项设置为on
set
ansi_padding,ansi_warnings,concat_null_yields_null,arithabort,quoted_identifier,ansi_nulls on
go
--开始创建名称为view_index的视图
create view view_index
with schemabinding
as
select sum(unitprice*quantity*(1.00-discount)) as revenue,orderdate,productid,count_big(*) as count from dbo.[order details] a1,dbo.order b1 where a1.order=b1.orderid group by orderdate,productid
go
--创建视图索引
create unique clustered index iv1 on view_index (orderdate,productid)
go
select * from view_index
go
alter view drop view对视图索引进行修改或删除
取得视图索引的相关数据
使用sp_helpindex的系统存储过程来显示视图上的所有索引,要浏览视图索引的相关数据可以在sp_helpindex 的系统存储过程后面加上要进行浏览的视图索引名字
范例
--浏览视图索引view_index的相关数据
exec sp_helpindex 'view_index'
go
10.6 取得视图相关的数据
如果创建的视图没有经过加密时,就可以下达T-SQL语句来取得视图的相关信息或是查看视图所定义的数据
sp_helptext取得视图的相关数据
浏览视图的相关数据在sp_helptext后加上要浏览视图的名称
范例
--浏览在pubs数据库内的titleview视图相关数据
EXEC sp_helptext 'titleview'
go
10.7 通过视图来更新数据
视图的功能除可以让我们将经常要查询的数据利用视图来浏览结果之外,也可以用来添加,修改或删除数据,但使用视图添加,修改或删除数据时,最好是针对某一个表格来做添加,修改或删除数据的操作
在视图中汇总函数或计算字段的值不能更改
添加数据
语法 insert view_name (column1,column2...column n) values (values1,values2,...)
范例
--创建一个新的视图
create view cust_view
as
select 客户编号,客户名称,折扣 from 客户表格
go
--自视图cust_view中添加一笔记录
insert cust_view(客户编号,客户名称,折扣) values ('A1027','MICKEY',0.8)
go
修改数据
当对视图内进行数据修改时,最好是保持一次针对一个表格来进行修改,以确保数据能够正确地修改
语法
update view_name set column_name=column_name where condition
范例
update cust_view set 折扣=折扣*10 where 客户编号='A1027'
go
删除数据
语法
delete view_name where condition
范例
--从视图auth_view删除一笔记录
delete cust_view where 客户编号='A1027'
go
在视图窗口内进行数据更新
将视图创建完成后,就可以将视图当作是一个普通的表格一样,让用户用来添加,修改以及删除数据
在视图内,不管是添加数据,还是修改或删除数据,都可以通过使用INSTEAD OF的触发程序,并配合T-SQL的INSERT,UPDATE以及DELETE语句即可
在视图内添加数据
范例
--此范例说明如何使用T-SQL的INSERT语句来添加数据
use misdb
go
--创建视图app_view
create view app_view
as
select 客户编号,客户名称,折扣 from 客户表格
go
--在app_view视图内添加一笔记录
insert into app_view values('A001','林大聪',0.8)
go
在视图内修改数据
use misdb
go
update app_view set 折扣=折扣+0.1
go
在视图内删除数据
在视图删除数据时,必须要注意的是,在定义视图的FORM子句内,只能列出一个表格,也就是在视图内一次只能针对一个表格内的记录来删除
范例
use misdb
go
delete from app_view where 客户编号='b001'
go
一 选择数据库和定义支持索引视图的合适选择性
use Northwind
go
SET ANSI_NULLS,ANSI_PADDING,ANSI_WARING,ARITHABORT,CONCAT_NULL_YIELDS_NULL,QUOTED_IDENTIFIER ON
GO
SET NUMERIC_ROUNDABOR OFF
这个过程的第二步是建立视图
create view orderRevenue WITH SCHEMABINDING
AS
SELECT SUM(Quantity * UnitPrice) as Revenue,OrderDate,ProductId,Count_BIG(*) as COUNT
FROM [order datails],orders WHERE [order details].orderID=order.orderID GROUP BY
OrderDate,Productid
go
在视图上建立群集索引,可以建立一个使用这个视图的索引,很有可能,你已
Tags:  三视图 视图与索引区别 视图建索引 物化视图索引

延伸阅读

最新评论

发表评论