文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MSSQL索引视图怎么用

2024-04-02 19:55

关注

这篇文章将为大家详细讲解有关MSSQL索引视图怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1)    确保索引视图参考的表的set options都是正确的;

2)    确保创建表和视图前会话的set option是正确的;

3)    确保视图定义是确定性的;

4)    确保要以WITH SCHEMABINDING option创建视图;

5)    确保首先在视图上创建唯一簇索引;

6)    上面提到的set options正确值如下所示:

?  ANSI_NULLS                       ON

?  ANSI_PADDING                     ON

?  ANSI_WARNINGS*                  ON

?  ARITHABORT                        ON

?  CONCAT_NULL_YIELDS_NULL       ON

?  NUMERIC_ROUNDABORF           OFF

?  QUOTED_IDENTIFIER                 ON

1)    运行CREATE INDEX命令的用户必须是视图的属主; 

2)    创建索引时,IGNORE_DUP_KEY option必须被设置为OFF(默认值);

3)    视图定义中的表名必须包含模式名,例如:schema.tablename;

4)    视图中参考的用户自定义函数必须以WITH SCHEMABINDING option创建;

5)    视图中参考的任何用户定义的函数名必须包含模式名,例如: schema.function;

6)    用户定义后函数的数据存取属性必须是NO SQL,并且,外部存取属性必须是NO;

7)    通用语言运行时Common language runtime (CLR)函数可以出现于视图的select list中,但其不能是簇索引键列,同时,CLR函数也不能出现于视图的where子句和连接操作的on子句中。

8)    视图中CLR函数和CLR用户自定义类型的方法必须是下列的属性设置:

?  DETERMINISTIC = TRUE

?  PRECISE = TRUE

?  DATA ACCESS = NO SQL

?  EXTERNAL ACCESS = NO

9)    视图必须以WITH SCHEMABINDING option创建;

10)  视图必须仅参考同一个数据库中的基表。视图中不能参考其他视图。

11)  视图定义中的select语句不能包含下述T-SQL元素:

?  COUNTROWSET

?  functions (OPENDATASOURCE, OPENQUERY, OPENROWSET, AND OPENXML)

?  OUTER joins (LEFT, RIGHT, or FULL)

?  Derived table (defined by specifying a SELECT statement in the FROM clause)

?  Self-joins

?  Specifying columns by using SELECT * or SELECT table_name.*

?  DISTINCT

?  STDEV, STDEVP, VAR, VARP, or AVG

?  Common table expression (CTE)

?  float*, text, ntext, image, XML, or filestream columns

?  Subquery

?  OVER clause, which includes ranking or aggregate window functions

?  Full-text predicates (CONTAIN, FREETEXT)

?  SUM function that references a nullable expression

?  ORDER BY

?  CLR user-defined aggregate function

?  TOP

?  CUBE, ROLLUP, or GROUPING SETS operators

?  MIN, MAX

?  UNION, EXCEPT, or INTERSECT operators

?  TABLESAMPLE

?  Table variables

?  OUTER APPLY or CROSS APPLY

?  PIVOT, UNPIVOT

?  Sparse column sets

?  Inline or multi-statement table-valued functions

?  OFFSET

?  CHECKSUM_AGG

12)  索引视图可以包含float列,但这些列不能出现在簇索引中;

13)  如果存在GROUP BY ,则视图定义必须包含COUNT_BIG(*)且一定不要包含HAVING。这些GROUP BY限制仅用于视图定义中。一个查询可以在其计划中使用索引视图即使并不满足这条GROUP BY限制;

14)  如果视图定义包含一个GROUP BY子句,则唯一簇索引只能参考GROUP BY子句中确定的列。


好了,前面说了这么多限制和要求,让人看了头疼,不用想那么严重,很多技术都会写诸多的要求和限制,可我们不还是能自由自在的使用吗?别光说不练了,看看下面我们怎么创建和使用索引视图吧。


USE AdventureWorks2012;  
GO  
--为了支持索引视图设置相关options
SET NUMERIC_ROUNDABORT OFF;  
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,  
    QUOTED_IDENTIFIER, ANSI_NULLS ON;  
GO  
--以with schemabinding创建索引视图
IF OBJECT_ID ('Sales.vOrders', 'view') IS NOT NULL  
DROP VIEW Sales.vOrders ;  
GO  
CREATE VIEW Sales.vOrders  
WITH SCHEMABINDING  
AS  
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,  
        OrderDate, ProductID, COUNT_BIG(*) AS COUNT  
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o  
    WHERE od.SalesOrderID = o.SalesOrderID  
    GROUP BY OrderDate, ProductID;  
GO  
--在视图上创建第一个唯一簇索引
CREATE UNIQUE CLUSTERED INDEX IDX_V1   
    ON Sales.vOrders (OrderDate, ProductID);  
GO  
--该查询能使用索引视图即使FROM子句中并未确定该视图
SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev,   
    OrderDate, ProductID  
FROM Sales.SalesOrderDetail AS od  
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID  
        AND ProductID BETWEEN 700 and 800  
        AND OrderDate >= CONVERT(datetime,'05/01/2002',101)  
GROUP BY OrderDate, ProductID  
ORDER BY Rev DESC;  
GO  
--该查询可以使用以上索引视图  
SELECT  OrderDate, SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev  
FROM Sales.SalesOrderDetail AS od  
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID  
        AND DATEPART(mm,OrderDate)= 3  
        AND DATEPART(yy,OrderDate) = 2002  
GROUP BY OrderDate  
ORDER BY OrderDate ASC;  
GO  

 

关于“MSSQL索引视图怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯