`
evget
  • 浏览: 139156 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类

用索引提高SQL Server数据处理的效率

阅读更多
文章关键字:|索引|SQL Server|提高|数据|处理|效率|数据库|基础|I/O|

  在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个索引。因为查询执行的大部分开销是磁盘I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读表的每一个数据页,如果有索引指向数据值,则查询只需读几次磁盘就可以了。所以如果建立了合理的索引,优化器就能利用索引加速数据的查询过程。但是,索引并不总是提高系统的性能,在增、删、改操作中索引的存在会增加一定的工作量,因此,在适当的地方增加适当的索引并从不合理的地方删除次优的索引,将有助于优化那些性能较差的SQL Server应用。实践表明,合理的索引设计是建立在对各种查询的分析和预测上的,只有正确地使索引与程序结合起来,才能产生最佳的优化方案。本文就SQL Server索引的性能问题进行了一些分析和实践。

  一、聚簇索引(clustered indexes)的使用

  聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页。建立聚簇索引的思想是:

  1、大多数表都应该有聚簇索引或使用分区来降低对表尾页的竞争,在一个高事务的环境中,对最后一页的封锁严重影响系统的吞吐量。

  2、在聚簇索引下,数据在物理上按顺序排在数据页上,重复值也排在一起,因而在那些包含范围检查(between、<、<=、>、>=)或使用group by或order by的查询时,一旦找到具有范围中第一个键值的行,具有后续索引值的行保证物理上毗连在一起而不必进一步搜索,避免了大范围扫描,可以大大提高查询速度。

  3、在一个频繁发生插入操作的表上建立聚簇索引时,不要建在具有单调上升值的列(如IDENTITY)上,否则会经常引起封锁冲突。

  4、在聚簇索引中不要包含经常修改的列,因为码值修改后,数据行必须移动到新的位置。

  5、选择聚簇索引应基于where子句和连接操作的类型。

  聚簇索引的侯选列是:

  1、主键列,该列在where子句中使用并且插入是随机的。

  2、按范围存取的列,如pri_order > 100 and pri_order < 200。

  3、在group by或order by中使用的列。

  4、不经常修改的列。

  5、在连接操作中使用的列。

  二、非聚簇索引(nonclustered indexes)的使用

  SQL Server缺省情况下建立的索引是非聚簇索引,由于非聚簇索引不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指向数据所在的页面。换句话说非聚簇索引具有在索引结构和数据本身之间的一个额外级。一个表如果没有聚簇索引时,可有250个非聚簇索引。每个非聚簇索引提供访问数据的不同排序顺序。在建立非聚簇索引时,要权衡索引对查询速度的加快与降低修改速度之间的利弊。另外,还要考虑这些问题:

  1、索引需要使用多少空间。

  2、合适的列是否稳定。

  3、索引键是如何选择的,扫描效果是否更佳。

  4、是否有许多重复值。

  对更新频繁的表来说,表上的非聚簇索引比聚簇索引和根本没有索引需要更多的额外开销。对移到新页的每一行而言,指向该数据的每个非聚簇索引的页级行也必须更新,有时可能还需要索引页的分理。从一个页面删除数据的进程也会有类似的开销,另外,删除进程还必须把数据移到页面上部,以保证数据的连续性。所以,建立非聚簇索引要非常慎重。非聚簇索引常被用在以下情况:

  1、某列常用于集合函数(如Sum,....)。

  2、某列常用于join,order by,group by。

  3、查寻出的数据不超过表中数据量的20%。

  三、覆盖索引(covering indexes)的使用

  覆盖索引是指那些索引项中包含查寻所需要的全部信息的非聚簇索引,这种索引之所以比较快也正是因为索引页中包含了查寻所必须的数据,不需去访问数据页。如果非聚簇索引中包含结果数据,那么它的查询速度将快于聚簇索引。

  但是由于覆盖索引的索引项比较多,要占用比较大的空间。而且update操作会引起索引值改变。所以如果潜在的覆盖查询并不常用或不太关键,则覆盖索引的增加反而会降低性能。



未完,原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9265
分享到:
评论

相关推荐

    利用索引提高SQLServer数据处理效率

    在当的地方增加适当的索引并从不合理的地方删除次优的索引,将有助于优化那些性能较差的SQL Server应用。实践表明,合理的索引设计是建立在对各种查询的分析和预测上的,只有正确地使索引与程序结合起来,才能产生...

    通过使用索引提高SQL SERVER的性能.pdf

    通过使用索引提高SQL SERVER的性能.pdf

    SQL Server的全文索引及优化.pdf

    SQL Server的全文索引及优化.pdf

    SQL Server索引效率分析.pdf

    SQL Server索引效率分析.pdf

    SQL Server 2012 管理高级教程(第2版)试读

    你还可以学到如何掌握SQLServer 2012中的最新特性,包括客户端连接性的提升、云计算、数据复制以及商业智能。这本由业内领先专家撰写的详尽指南将会帮助你提升效率、可扩展性以及SQL Server的性能,因此你可以在更短...

    索引技术在提高SQL Server性能中的应用.pdf

    索引技术在提高SQL Server性能中的应用.pdf

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 2.1.4 使用SQL Server 2008管理报表 2.2 规划SQL Server 2008的部署 2.2.1 建立服务器的性能系统 2.2.2 配置I/O子系统 2.2.3 确保可用性和可伸缩性 2.2.4 确保连接...

    SQL Server数据库中索引使用和优化

    而采用索引来加快数据处理速度也成为广大数据库用户所接受的优化方法。实践表明,合理的索引设计是建立在对各种查询的分析和预测上的,只有正确地使索引与程序结合起来,才能产生最佳的优化方案。本文就 SQL Server...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 2.1.4 使用SQL Server 2008管理报表 2.2 规划SQL Server 2008的部署 2.2.1 建立服务器的性能系统 2.2.2 配置I/O子系统 2.2.3 确保可用性和可伸缩性 2.2.4 确保连接...

    Microsoft SQL Server 2005技术内幕:存储引擎(中文).pdf

     3.1 使用SQL Server 配置管理器  配置网络协议  默认的网络配置  管理服务  3.2 系统配置  任务管理  资源分配  系统分页文件的位置  非必需的服务  网络协议  与SQL Server 早期版本之间的...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 2.1.4 使用SQL Server 2008管理报表 2.2 规划SQL Server 2008的部署 2.2.1 建立服务器的性能系统 2.2.2 配置I/O子系统 2.2.3 确保可用性和可伸缩性 2.2.4 确保连接...

    SQLServer2008高级程序设计

    SQL Server 2008高级程序设计内容简介:《SQL Server 2008高级程序设计》由世界顶尖SQL Server权威专家Robert Vieira撰写,它介绍SQL Server 2008的新功能,讨论如何设计性能卓越的应用程序,分析如何提高应用程序...

    SQL Server数据库查询速度慢原因及优化方法

    like ''a%'' 使用索引 like ''%a'' 不使用索引用 like ''%a%'' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。 9、DB Server 和APPLication Server ...

    深入解析SQL Server 2008

    全书共分为11章,首先在第1章中详细介绍了sql server 2008的架构和配置,然后在接下来的10个章节中深入探讨了sql server 2008数据存储和查询处理等各个方面的内部机制,包括:数据库和数据库文件、表、索引、跟踪、...

    Inside SQL SERVER 2005 T-SQL Programming

    创建和使用索引、视图,实现高效的数据管理。 学习使用T-SQL进行数据库编程,实现多功能数据管理。 编写和使用存储过程,在数据库中实现高性能数据管理。 编写和使用触发器,根据业务规则,实现复杂的数据完整行约束...

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

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

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

     SQL Server 2005中新的逻辑处理阶段  表运算符  OVER子句  集合操作  结论 第2章 物理查询处理  查询处理期间的数据流  编译  Algebrizer  优化  使用查询计划  更新计划  结论  致谢 第3章 查询...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    本书涵盖了T-SQL程序设计的方方面面,如基于集合的编程技术、日期和时间相关的XML和CLR数据类型的使用、临时对象、T-SQL和CLR用户自定义函数、存储过程、触发器、事务和新的错误处理结构、应用并发模型支持并发用户...

    sql server2008高级程序设计(1/2)

     1.3 SQL Server数据类型  1.4 SQL Server对象标识符  1.5 小结 第2章 工具  2.1 联机丛书  2.2 SQL Server配置管理器  2.3 SQL Server Management Studio  2.4 SQL Server Business Intelligence ...

    深入解析SQL Server 2008(下)

    书中详细阐述了SQL Server处理查询、管理数据的相关内容,包括SQL Server架构和配置、跟踪/扩展事件、日志和恢复、索引、表格、查询优化、事务/并发以及DBCC。  《深入解析SQL Server 2008》适合中高级数据库开发...

Global site tag (gtag.js) - Google Analytics