视图是对数据(一种元数据类型)的一种描述。当创建了一个典型视图时,通过封装一个 SELECT 语句(定义一个结果集来表示为虚拟表)来定义元数据。当在另一个查询的 FROM 子句中引用视图时,将从系统目录检索该元数据,并替代该视图的引用扩展元数据。视图扩展之后,SQL Server 查询优化器会为执行查询编译一个执行计划。查询优化器会搜索针对某个查询的一组可能的执行计划,并根据对执行每个查询计划所需的实际时间的估计,选择所能找到的成本最低的计划。

通过在数据库视图上创建一个唯一的聚簇索引来在磁盘上实物化。在唯一聚簇索引创建之后,该视图的结果集立即被实物化并保存在数据库的物理存储中,从而查询执行期间节约了执行大开销操作的开销。在视图被实物化后,就可以在该索引视图上创建多个非聚簇索引了。

------------限制太多,没有索引来的快。以至于现实中我很少使用。太费劲。当然有它存在的好处(比如出系统报告数据时,索引视图可以将预先计算物化到磁盘上)。这里只是将我的理解简单总结如下。

对于非索引视图,解析查询所必需的视图部分会在运行时被具体化。任何计算(比如:联接或聚合)都在每个引用视图的查询执行时完成1。在视图上创建了唯一的聚集索引后,该视图的结果集随即被具体化,并保存在数据库的物理存储中,从而在执行时节省了执行这一高成本操作的开销。

索引视图的优点也就是其提高查询性能的方式:
1、预先计算聚合并将其保存在索引中,从而在查询执行时,最小化高成本的计算。
2、预先联接各个表并保存最终获得的数据集。
3、保存联接或聚合的组合。 索引视图 创建索引视图的要求:
1、ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON.
2、视图只能引用基表,不能够引用视图。并且是同一数据库中、所有者也必须相同。
3、必须使用 SCHEMABINDING 选项创建视图。即架构绑定将视图绑定到基表的架构上。
4、必须已使用 SCHEMABINDING 选项创建了视图引用的用户定义函数。
5、创建索引时 ANSI_PADDING、ANSI_NULLS、QUOTED_IDENTIFIER、ANSI_WARNINGS、CONCAT_NULL_YIELDS_NULL 为 ON,
NUMERIC_ROUNDABORT 选项必须设置为 OFF。这是默认设置。
6、如果视图定义中的 SELECT 语句指定了一个 GROUP BY 子句,则唯一聚集索引的键只能引用在 GROUP BY 子句中指定 的列。
7、即使 CREATE INDEX 语句中未引用 text、ntext 或 image 列,视图中也不能包含这些列。
8、创建聚集索引或非聚集索引时,IGNORE_DUP_KEY 选项必须设置为 OFF(默认设置)。
9、视图中不能 有 ORDER BY \TOP \UNION\EXCEPT\ DISTINCT \ CROSS APPLY 或 OUTER APPLY 运算符、排名函数。 COMPUTE 或 COMPUTE BY 子句。
10、如果指定了 GROUP BY,则视图选择列表必须包含 COUNT_BIG(*) 表达式,且视图定义不能指定 HAVING、ROLLUP、 CUBE 或 GROUPING SETS。
11、对视图创建的第一个索引必须是唯一聚集索引。创建唯一聚集索引后,可以创建其他非聚集索引。
12、视图中列数据具有确定性,即不能出现可能为 NULL的情况。还有就是不能用 * 代替列,必须手动 描述查询的列。 13、浮点列不能作为唯一聚簇索引列。
14、索引视图中部支持 AVG。如果视图中包含 聚合函数 ,则视图的 SELECT 语句中必须默认包含 count_big(*) SQL SERVER2008 联机案例 SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
QUOTED_IDENTIFIER, ANSI_NULLS ON;
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);

sql 试图索引的更多相关文章

  1. SQL 创建索引的作用以及如何创建索引

    SQL 创建索引的作用以及如何创建索引 SQL 创建索引的作用 一.使用索引的优点: 1.通过唯一性索引(unique)可确保数据的唯一性 2.加快数据的检索速度 3.加快表之间的连接 4.减少分组和 ...

  2. SQL Server索引进阶:第八级,唯一索引

    原文地址: Stairway to SQL Server Indexes: Level 8,Unique Indexes 本文是SQL Server索引进阶系列(Stairway to SQL Ser ...

  3. SQL Server索引总结二

    从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...

  4. 【译】SQL Server索引进阶第八篇:唯一索引

    原文:[译]SQL Server索引进阶第八篇:唯一索引     索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就 ...

  5. SQL Server2005索引碎片分析和解决方法

    SQL Server2005索引碎片分析和解决方法 本文作者(郑贤娴),请您在阅读本文时尊重作者版权. 摘要: SQL Server,为了反应数据的更新,需要维护表上的索引,因而这些索引会形成碎片.根 ...

  6. 转: SQL Server索引的维护 - 索引碎片、填充因子

    转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题 ...

  7. SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>

    一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...

  8. SQL Server 索引结构及其使用(一)

    转载:SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clus ...

  9. SQL联合索引 与 单一列的索引

    SQL联合索引 与 单一列的索引 标签: sqlwebobjectstatistics优化磁盘 2012-06-12 13:46 27992人阅读 评论(1) 收藏 举报  分类: 数据库(94)  ...

随机推荐

  1. python实现进程的并发

    __author__ = 'luozt' import telnetlib import multiprocessing import random def telnet(ip,hostname): ...

  2. Excel合并计算

    office版本为2013,数据来源:我要自学网,曾贤志老师 计算之前,光标定在空白位置,不要定在数据源. 将汇总的类型居于首列(不可以跨区域选择,可以把不需要汇总的移动到其他列). 要有删除原来数据 ...

  3. Oracle OCM提纲

    ocm提纲 数据库创建详解 ◆ 通过手动方式创建数据库 环境变量的设置 密码文件的创建过程以及使用情景 Oracle数据库中参数文件的演进过程 参数文件的对比 参数的修改方式介绍 数据库启动过程时的内 ...

  4. Oracle 备份与恢复基础

    Oracle 备份与恢复基础 :三思笔记 备份与恢复 A whole database backup is either a consistent backup or an inconsistent ...

  5. 2 ignite关键特性

    数据注入和流计算: Ignite流式计算允许以可扩展和容错的方式处理连续不中断的数据流.在一个中等规模的集群中,数据注入Ignite的比例会很高,很容易达到每秒百万级的规模. Ignite可以与主要的 ...

  6. c#抓取网页数据

    写了一个简单的抓取网页数据的小例子,代码如下: //根据Url地址得到网页的html源码 private string GetWebContent(string Url) { string strRe ...

  7. Android 使用SWIG生成Jni代码<转>

    http://blog.csdn.net/u010780612/article/details/51066819 感觉也就那样把,我没有编译成功,实用性暂时没看到多大优点...

  8. 浅谈时钟的生成(js手写代码)(非原创)

    在生成时钟的过程中自己想到布置表盘的写法由这么几种: 当然利用那种模式都可以实现,所以我们要用一个最好理解,代码有相对简便的方法实现 1.利用三角函数 用js在三角函数布置表盘的过程中有遇见到这种情况 ...

  9. JAVA基础知识总结5(面向对象特征之一:继承)

    继 承: 1:提高了代码的复用性. 2:让类与类之间产生了关系,提供了另一个特征多态的前提. 父类的由来:其实是由多个类不断向上抽取共性内容而来的. JAVA只支持单继承.java虽然不直接支持多继承 ...

  10. HDU 4912 LCA + 贪心

    题意及思路 说一下为什么按LCA深度从深到浅贪心是对的.我们可以直观感受一下,一条的路径会影响以这个lca为根的这颗树中的链,而深度越深,影响范围越小,所以先选影响范围小的路径. #include & ...