`

SQL Server 使用索引视图

 
阅读更多
我们在使用视图的时候有时想怎么能给视图加索引呢,其实,视图和普通的表一样可以添加索引,当SQL Server必须联合很多表时,这项技术可以大大提高Select语句的性能。
        当在视图上创建一个唯一聚集索引(unique clusterd index)时,SQL Server将物化这个视图。看下面的例子:
        CREATE VIEW dbo.vtUsers
        WITH SCHEMABINDING
        AS
        SELECT dbo.tUsers.userid, dbo.tUsers.username, dbo.tUsers.password,
              dbo.tUsers.question, dbo.tUsers.answer, dbo.tUsers.email, dbo.tUsers.realname,
              dbo.tUsers.sex, dbo.tUsers.birthday, dbo.tUsers.country, dbo.tUsers.city,
              dbo.tUsers.address, dbo.tUsers.zip, dbo.tUsers.tele, dbo.tUsers.exdate,
              dbo.tUsers.totalfund, dbo.tUsers.ordertotal, dbo.tUsers.jifen, dbo.tUsers.pid,
              dbo.tUsers.agentid, dbo.tUsers.agentid2, dbo.tUsers.agentid3, dbo.tUsers.status,
              dbo.tUsers.checkmod, dbo.tUsers.account, dbo.tUsers.bank, dbo.tUsers.logip,
              dbo.tUsers.sitename, dbo.tUserInfo.siteurl
        FROM dbo.tUsers INNER JOIN
              dbo.tUserInfo ON dbo.tUsers.userid = dbo.tUserInfo.userid
        WHERE dbo.tUserInfo.UserID >20

        CREATE UNIQUE CLUSTERED INDEX idxvtUser
        ON vtUsers(userid)

        尽管这个索引只引用了列的一个子集,但是这个索引包含叶级别节点中的所有列(每个聚集索引也都是这样)。
        和标准视图一样索引视图的创建和使用也都是有限制的。一个标准视图转换为一个索引视图必须遵守以下规则:
A.视图必须使用With Schemabinding选项来创建;
B.在这个视图中不能使用其他视图、导出表、行集函数或自查询,也就是说只能使用表;
C.视图所用到的基本表必须和视图属于同一个所有者;
D.视图只能链接同一个数据库中的表;
E.视图不能包含一个外部链接或自链接,也就是说在链接表时只能使用INNER JOIN并且INNER JOIN前后不能使同一个表,不能使用LEFT(RIGHT) JOIN 或者 LEFT (RIGHT) OUTER JOIN ;看下面的例子:
比如说创建了下面的视图(自链接):
        CREATE VIEW dbo.vtUsers
        WITH SCHEMABINDING
        AS
        SELECT dbo.tUsers.userid, dbo.tUsers.username, dbo.tUsers.password,
              dbo.tUsers.question, dbo.tUsers.answer, dbo.tUsers.email, dbo.tUsers.realname
        FROM dbo.tUsers Inner join
              dbo.tUsers as t ON dbo.tUsers.userid = t.userid
这个视图是可以创建的,但是在创建索引时CREATE UNIQUE CLUSTERED INDEX idxvtUser  ON vtUsers(userid) 就会出错了;
再看下面的视图(外部连接):
        CREATE VIEW dbo.vtUsers
        WITH SCHEMABINDING
        AS
        SELECT dbo.tUsers.userid, dbo.tUsers.username, dbo.tUsers.password,
              dbo.tUsers.question, dbo.tUsers.answer, dbo.tUsers.email, dbo.tUsers.realname
        FROM dbo.tUsers LEFT OUTER JOIN
              dbo.tUserInfo ON dbo.tUsers.userid = dbo.tUserInfo.userid
        在创建索引时也会出错的。
F. 视图不能包含UNION子句、TOP子句、ORDER BY子句、Having子句、Rollup子句、Cube子句、compute子句、Compute By子句或Distinct关键字;
G. 视图不允许使用某些集合函数,如:Count(*)可以使用count_big(*)代替、avg()、max()、min()、stdev()、stdevp()、var()或varp()等;
H. 视图不能使用Select * 这样的语句,也就是说视图的所有字段都必须显示指定;
I. 视图不能包含Text、ntext、image类型的列;
J. 如果视图包含一个Group By子句,那么他必须在Select列中包含count_big(*);
K. 视图中的所有标和用户自定义的函数都必须使用两段式名来引用,即所有者.表或函数名称;
L. 所有的基本表和视图都必须使用 Set Ansi_Nulls On 创建;
M. 在创建索引时或创建索引后执行IUD时,必须显示或隐式地执行:
        Set ANSI_NULLS ON
        SET ANSI_PADDING ON
        SET ANSI_WARNINGS ON
        SET ARITHABORT ON
        SET CONCAT_NULL_YIELDS_NULL ON
        SET QUOTED_IDENTIFIER ON
        SET NUMERIC_ROUNDABORT OFF
       各个选项的有关信息或意义,可以查阅SQL Server的联机丛书,这里就不再介绍了;
N. 索引视图只有在SQL Server2000的企业版或开发版或者更高的版本中才能创建。
        如果一个视图可以添加唯一聚集索引,那么在添加了唯一聚集索引之后,该视图也可以像数据库表一样添加非聚集索引,CREATE INDEX  idxvtUsers ON  vtUsers(username,realname)。
分享到:
评论

相关推荐

    浅析SQL Server 2000索引视图:使用索引视图提高查询性能.pdf

    SQL Server 2000中的索引视图是一种新的数据库功能,它允许在视图中创建索引,从而存储视图的结果集并对其进行索引处理。索引视图在某些情况下能够显著提高数据库查询性能,尤其是在涉及大量行的联接和聚合操作时。...

    通过SQL_Server_2005索引视图提高性能

    - 可以使用SQL Server内置的性能监视工具或其他第三方工具来监控索引视图的性能。 4. **索引视图会增加数据库的维护负担吗?** - 是的,但通过合理的设计和维护策略可以控制这种负担。 #### 二十一、如需获得更多...

    利用SQL Server 2005索引视图提高数据库系统性能.pdf

    标题:“利用SQL Server 2005索引视图提高数据库系统性能”指明了文章的讨论焦点在于如何通过在SQL Server 2005中创建并使用索引视图来提升数据库的运行效率。索引视图,或称物化视图,在SQL Server中是带有唯一聚集...

    SQL Server索引视图及性能提高简介

    索引视图必须在SQL Server 2000的企业版或开发者版中使用,因为它们需要额外的资源来维护。 索引视图的性能提升体现在几个关键方面: 1. **预先计算聚合**:索引视图可以预先计算并存储聚合结果,避免了查询执行时...

    SQL Server中用索引视图查看性能状况

    在执行计划中,你会看到SQL Server可能直接使用索引视图的索引来获取结果,而不是扫描整个基础表,这在大数据量的情况下可以大大提高查询效率。 总之,索引视图是SQL Server提供的一种优化查询性能的工具,尤其适合...

    通过SQLServer2005索引视图提高性能[收集].pdf

    总之,SQL Server 2005的索引视图是提高查询性能的重要工具,但其使用需要综合考虑查询模式、数据更新频率、存储空间和维护成本等因素。正确设计和应用索引视图,可以极大地提升数据库系统的整体性能。

    SQL server 2008 索引与视图

    详细解说了索引与视图的相关内容

    细说SQL Server中的视图

    7,索引视图; 1.什么是视图  视图是由一个查询所定义的虚拟表,它与物理表不同的是,视图中的数据没有物理表现形式,除非你为其创建一个索引;如果查询一个没有索引的视图,Sql Server实际访问的是基础表。  ...

    SQLServer视图及索引的创建及使用

    资源名称:SQL Server 视图及索引的创建及使用内容简介: 本文档主要讲述的是SQL Server 视图及索引的创建及使用;目的是通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除通过企业管理器。希望本文档会给...

    SQL Server 索引中include的魅力(具有包含性列的索引)

    只能对表或索引视图的非聚集索引定义非键列。除 text、ntext 和 image 之外,允许所有数据类型。 摘要 5:列大小准则:必须至少定义一个键列。最大非键列数为 1023 列,也就是最大的表列数减 1。 SQL Server 索引...

    SQL Server数据库实验指导书 实验教程 数据库实验05 视图的创建与使用.pdf

    2.掌握SQL Server Management Studio的启动和使用。 3.掌握SQL Server 2005服务器的配置和注册。 4.掌握SQL Server 2005查询的基本使用。 5.掌握应用SQL Server Management Studio创建数据库的方法。 6.掌握应用SQL ...

    sql server视图详解

    4. **索引视图**:对视图进行了物理存储,以提高查询性能,但需要满足一定的限制条件。 ### 视图的作用 1. **简化查询**:视图可以隐藏复杂的表结构,用户只需操作视图,无需了解底层数据源的细节。 2. **安全机制*...

    sqlserver 2008 索引与视图 详解

    在SQL Server 2008中,索引和视图是两个重要的概念,它们对于数据库的性能和数据管理起着至关重要的作用。 **索引基础知识** 索引是一种加速数据检索的机制,类似于书籍的目录。在数据库中,索引是由表或视图中一...

    三个SQL视图查出所有SQL Server数据库字典

    在SQL Server中,数据库字典是存储有关数据库元数据(如表、列、索引等)的系统表和视图的集合。这些元数据对于了解和管理数据库结构至关重要。通过查询这些系统表或视图,可以获取到关于数据库对象的各种信息。 ##...

    sql server 重新组织和重新生成索引

    SQL Server 重新组织和重新生成索引 在 SQL Server 中,索引的碎片可能会对查询性能产生影响,因此需要对索引进行维护。SQL Server 2005 提供了重新组织和重新生成索引的功能,以修复索引碎片。 重新组织索引 ...

    SQL_Server视图和索引

    ### SQL Server 视图与索引详解 #### 一、视图的概念与操作 ##### 1.1 视图的基本概念 视图是基于SQL语句的结果集的一种虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,...

    SQLServer 视图 事务 索引

    创建视图使用`CREATE VIEW`语句,修改视图则使用`ALTER VIEW`,而不再需要重复编写长长的查询语句。删除视图则通过`DROP VIEW`实现。 事务是数据库操作的基本单位,它确保数据库操作的一致性和完整性。在SQL Server...

    Sql Server 数据库视图 索引等

    根据给定的文件信息,我们可以总结出以下几个关键的知识点: ...这些知识点涵盖了SQL Server数据库中的视图、索引、存储过程、事务、触发器以及内置函数等内容,对于理解和应用SQL Server数据库非常有帮助。

Global site tag (gtag.js) - Google Analytics