利用索引来提升SQL Server视图的运行性能(二)

  二是如果视图中包含Group By语句的话,在最好不要采用索引视图。虽然Group
By语句需要对数据进行聚合操作。但是他是高基数度的数据聚合。高基数度表示健包含许多不同的值。如需要采用Group
By语句对数以万计的用户数据进行分组,则这个分组对象的数值会很大。这个用户的数量就是基数度。唯一键具有可能的最高基数度,因为每个键具有不同的值。索引视图通过减少查询必须访问的行数来提高性能。如果视图结果集中的行数像基表中的行数那么多,那么使用视图获得的性能收益微乎其微。

  三、 索引视图的几个典型应用。

  笔者在这里根据自己的数据库设计经验,谈谈索引视图的两个主要应用。希望这两个例子能够给大家带来一定的启发。

  如某个商品零售企业,其在不同的地方有多个零售门店。为了便于管理,不同的零售门店都采用独立的数据库表来记录他们的销售情况。到月底的时候,需要对各个,门店的销售记录进行汇总,最终要统计在一张表中。此时,该如何处理呢?通常情况下,是先对各个门店的销售情况进行汇总,统计出每个类别的销售金额。然后再把各个表的内容进行连接,放在同一张报表中。如果从数据库设计的角度讲,那么就是先对每张销售情况表进行聚合操作,然后再利用Union语句把它们连接起来。Union语句就是将两个SQL语句的结果合并起来。如要实现以上目的,我们可以通过SQL1
语句 Uinon
SQL语句2这种方式实现目的。但是,如果这些数据用于决策分析系统,每次用到的时候都需要重新查询,就会大大的增加数据库的查询负担。为此,就要建立索引视图。不过可惜的是,索引视图不支持Uinon操作符。那该如何处理呢?通常情况下,笔者都是这么做的。第一步先对每个门店的销售表进行汇总统计,此时可以利用索引视图来提高查询的速度。第二步再用SQL语句来查询这几个索引视图中的数据并利用Uinon语句进行连接。也就是说,不直接从数据库基表中查询数据进行连接,而是从索引视图中进行连接。这虽然不能够提高Uinon操作的速度,但是因为每个表的聚合操作时间缩短了,那么其Uinon连接的时间相对来说,也就缩短了。

  再如,现在各个门市店的销售情况都是在独立的SQL数据库中记录。然后在季末或者年末需要它们他们的数据连接起来。此时,又该如何处理呢?基本上跟上面的操作步骤类似。第一步统计每个数据库中的销售情况,对某些数据进行汇总操作。第二步就利用Union等操作符把它们的结果连接起来。但是由于索引视图不能够同时引用多个数据库中的表,所以不能够设计单个索引视图来完成这项任务。笔者的做法是,先在每个数据库中建立一张索引视图,来统计这些销售情况,即对每个数据库单独的执行聚合操作。然后再通过连接操作把它们的结果连接起来。这个跟上面的一样,索引视图并不能够直接提高连接操作的性能。他也是通过缩短各个数据库系统聚合操作的时间来实现缩短整个连接操作时间的目的。所以,其连接操作的总体速度会加快。

  四、 如何创建索引视图?

  其实,索引视图的创建非常简单。只需要在创建视图的时候,加入一个WITH
SCHEMABINDING的关键字即可。所以,要创建索引视图不难。其最大的难度还在于数据库工程师需要根据实际的情况,来判断是否需要采用索引视图。即需要应用场景,来分析此时采用索引视图能够改善视图的性能。

时间: 2024-09-27 01:19:44

利用索引来提升SQL Server视图的运行性能(二)的相关文章

解析SQL Server 视图、数据库快照_Mysql

简介数据库快照       数据库快照,正如其名称所示那样,是数据库在某一时间点的视图.是SQL Server在2005之后的版本引入的特性.快照的应用场景比较多,但快照设计最开始的目的是为了报表服务.比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点.快照还可以和镜像结合来达到读写分离的目的.下面我们来看什么是快照. 什么是快照     数据库快照是 SQL Server 数据库(源数据库)的只读静态视图.换句话说,快照可以理解为一个

利用ASP嵌套JS+SQL Server打造两级连动下拉框(一)

js|server|下拉 利用ASP嵌套JS+SQL Server打造两级连动下拉框(1)   随着网络技术的迅速发展,越来越多的电子商务网站也应运而生.而在构建一个功能强大的电子商务网站往往少不了提供网上注册功能给客户自行注册这个模块,为了尽可能方便客户填写信息,我们经常要用到下拉框供客户选择,特别是两级连动下拉框最为常用. 再说,本人今日发现CSDN论坛上也经常有网友提问这个问题,就是,需要一个两级连动下拉框,第一个显示省份名称,第二个显示相应的城市名.为了解答这个问题,我特别写这篇文章,希

利用ASP嵌套JS+SQL Server打造两级连动下拉框(二)

js|server|下拉 利用ASP嵌套JS+SQL Server打造两级连动下拉框(2) TwoLevel.asp<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta name="GENERATOR" content="Microsoft FrontPage 4.0"

sql server 视图视图创建问题

问题描述 sql server 视图视图创建问题 创建一个视图, 表A,表B, 表B中列名 X1与 表A中列名X2对应, 但表B中数据A中不一定有, 要在视图中新建一个项I,如果表A中有表B数据 则I为存在,如果没有则不存在 解决方案 没完全看懂你要什么样的,但跑不出左连接,右连接,内连接的范畴.http://www.cnblogs.com/LeoTerry/archive/2010/03/26/1696988.html 解决方案二: 秒解决问题~十分感谢~ 解决方案三: 秒解决问题~十分感谢~

sql server 视图重复列问题

问题描述 sql server 视图重复列问题 表A 列 Series ID Content 表B 列 Series QSeries text 表B中QSeries对应 表A 中Series 创建一个视图,视图中 显示 Series ID Content QSeries text 要求表A中一个Series 只对应 表B中一条数据 解决方案 SELECT A.*,(SELECT top 1 * FROM B WHERE QSeries=Series) AS QSeries FROM A 解决方案

利用Ring Buffer在SQL Server 2008中进行连接故障排除

原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring-buffer-sql-server-2008.aspx SQL Server 2008中包含一个新功能,旨在帮助解决特别棘手的连接问题.这个新功能是Connectivity Ring Buffer,它可以捕捉每一个由服务器发起的连接关闭记录(server-initiated connection

SQL Server 2008空间数据应用系列二:空间索引(Spatial Index)基础

原文:SQL Server 2008空间数据应用系列二:空间索引(Spatial Index)基础 在前一篇博文中我们学习到了一些关于地理信息的基础知识,也学习了空间参照系统,既地球椭球体.基准.本初子午线.计量单位.投影等相关理论知识,我们可以使用这些空间参照系统组件来定义一系列应用于地球空间上的几何图像来表示地理空间中的特定功能,表示着地球上一个一个特定的位置点. 本篇主要介绍地理空间索引的概念以及微软SQL Server 2008 R2中的空间索引的应用.   一.空间索引 空间索引是指依

SQL Server 2000 注入防护大全(二)_漏洞研究

SQL Server 2000 注入防护大全(二) 传统查询构造:select * FROM news where id=... AND topic=... AND .....admin'and 1=(select count(*) from [user] where username='victim' and right(left(userpass,01),1)='1') and userpass <>'select 123;--;use master;--:a' or name like

Sql Server之旅——第十二站 sqltext的参数化处理

原文:Sql Server之旅--第十二站 sqltext的参数化处理   说到sql的参数化处理,我也是醉了,因为sql引擎真的是一个无比强大的系统,我们平时做系统的时候都会加上缓存,我想如果没有缓存,就不会有什么 大网站能跑的起来,而且大公司一般会在一个东西上做的比较用心,比较细,sqlserver同样也使用了缓存,其中就包括Data cache 和Plan cache两个大头. 现在我们也知道了Plan cache包括上一篇生成的xml结构和sql text,更有趣的是,sql text