设为首页 收藏本站
查看: 1023|回复: 0

[经验分享] SQL Server 索引视图 聚簇索引

[复制链接]
YunVN网友  发表于 2018-10-16 11:46:22 |阅读模式
创建示例:  朋友的网站速度慢,让我帮忙看下,他用的SQL Server里面 有一个文章表里面有30多万条记录 还有一个用户表里面也差不多17万记录 偏偏当初设计的时候没有冗余字段 很多帖子信息需要JOIN用户表来显示 @_@
  还好今天学了一招
CREATE VIEW [dbo].[view_xxx] WITH SCHEMABINDING AS SELECT Table1.主键, Table1.外键 FROM Table1, Table2 WHERE ( Table1.外键 = Table2.主键)CREATE UNIQUE CLUSTERED INDEX IDX_view_xxxON [dbo].[view_xxx] (主键, 外键);ALTER DATABASE dbname SET ARITHABORT ON  这样就给视图创建了一个聚集索引
  连表以后COUNT的速度从1.几秒一下子降到0.00几秒
  ------------------------------------------------------------------------------------------------
  聚簇索引,或者聚集索引,是这样一种索引,建立这种索引后,会改变数据在表中的物理排列方式,使得数据的排列方式与聚簇索引一致.
  使用聚簇索引,在按照该索引进行查询时,通常比传统的不使用聚簇的索引速度要快;但是如果该表上的insert,delete,update操作很频繁,由于不断地改变数据在表中的物理排列方式,将导致性能下降;这种索引只有在静态表时才能达到较好的性能,对业务处理表,千万别用
  作者:Gail Erickson
  投稿人:Lubor Kollar
  投稿人:Jason Ward
  Microsoft Corporation
  2000年9月
  摘要:本文档介绍 SQL Server 2000 企业版的新功能 - 索引视图。讲解索引视图并讨论一些提高性能的具体方案。
  目录
  什么是索引视图?
  通过索引视图提高的性能
  使用索引视图的好处
  查询优化器如何使用索引视图
  设计的考虑因素
  设计准则
  使用“索引微调向导”
  维护索引视图
  创建索引视图
  使用 SET 选项以获得一致的结果
  使用确定性函数
  其它要求
  示例
  有关详细信息
  --------------------------------------------------------------------------------
  什么是索引视图?
  许多年来,Microsoft® SQL Server™ 一直都提供创建虚拟表(称为视图)的功能。在过去,这些视图主要有两种用途:
  提供安全机制,将用户限制在一个或多个基表中的数据的某个子集。
  提供一种机制,允许开发人员定制用户如何才能以逻辑方式查看存储在基表中的数据。
  SQL Server 2000 已经扩展了 SQL Server 视图的功能,以提高系统性能。它可以在一个视图上创建唯一的群集索引和非群集索引,可以改进最复杂查询的数据访问性能。在 SQL Server 2000 中,拥有唯一群集索引的视图被称为索引视图。
  注意:   索引视图只是 SQL Server 2000 企业版和 SQL Server 2000 开发人员版的一个功能。
  从数据库管理系统 (DBMS) 的观点来看,视图是数据(元数据)的说明。创建典型视图时,通过 SELECT 语句(定义一个显示为虚拟表的结果集)来定义元数据。当其它查询的 FROM 子句中引用了某个视图时,将从系统目录中检索该元数据,并对其进行扩展以代替该视图的引用。在视图扩展之后,查询优化器会为正在执行的查询编译单个执行计划。
  如果是非索引视图,视图在运行时将被实体化。任何计算(如联接或聚合)都在为每个引用该视图的查询执行查询期间进行。(视图并不总需要被完全实体化。查询可以包含其它一些谓词、联接或聚合,以应用于该视图所引用的表和视图。)在视图上创建了唯一的群集索引之后,视图的结果集会立即被实体化并持续保存在数据库的物理存储空间中,以便节省这种操作所占用的大量资源。
  在执行查询时,有两种方法可以使用索引视图。查询可直接引用索引视图,更重要的是,如果查询优化器确定视图能够替换为查询的部分或全部,而且这是低成本的查询计划,则可以选择索引视图。第二种情况是使用索引视图代替基础表及其普通索引。此时,不需要在查询中引用视图,查询优化器即可在执行查询期间使用该视图。这样,现有的应用程序无需更改即可从新建的索引视图中获益。
  通过索引视图提高的性能
  使用索引来提高查询性能并不是什么新观念,不过,索引视图还具有使用标准索引不能获得的其它性能优点。索引视图能够在以下方面提高查询性能:
  能够预先计算聚合并将其存储在索引中,从而最大限度地减少在执行查询期间进行成本很高的计算。
  能够预先联接表并存储生成的数据集。
  能够存储联接或聚合的组合。
  下图说明了查询优化器使用索引视图时一般能够提高多少性能。提供的查询复杂程度各不相同(例如,聚合计算的数量、所用表的数量或谓词数),并包括来自实际生产环境的数百万行的大表。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-622307-1-1.html 上篇帖子: Sql Server实用操作-日志清除的两种方法 下篇帖子: PHP等语言SQL注入的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表