网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > PL/SQL > 利用索引提高SQL Server数据处理效率-PLSQL  

利用索引提高SQL Server数据处理效率-PLSQL

2008-07-08  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

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

网管u家u.bitscn@com

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

网管下载dl.bitscn.com

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

网管论坛bbs_bitsCN_com

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

网管u家u.bitscn@com

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

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

网管bitscn_com

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

网管u家www.bitscn.net

        5、选择聚簇索引应基于where子句和连接操作的类型。 网管下载dl.bitscn.com

        聚簇索引的侯选列是:

网管u家u.bitscn@com

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

网管网www_bitscn_com

        2、按范围存取的列,如pri_order > 100 and pri_order < 200。 网管u家bitscn.net

        3、在group by或order by中使用的列。 网管u家u.bitscn@com

        4、不经常修改的列。

网管联盟bitsCN_com

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

中国网管论坛bbs.bitsCN.com

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

网管有家bitscn.net

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

网管网www_bitscn_com

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

        2、合适的列是否稳定。 网管网www_bitscn_com

        3、索引键是如何选择的,扫描效果是否更佳。 网管u家u.bitsCN.com

        4、是否有许多重复值。

网管联盟bitsCN_com

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

网管下载dl.bitscn.com

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

网管u家bitscn.net

        2、某列常用于join,order by,group by。 网管有家bitscn.net

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

网管u家u.bitsCN.com

        三、覆盖索引(covering indexes)的使用 网管论坛bbs_bitsCN_com

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

网管联盟bitsCN_com

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

网管论坛bbs_bitsCN_com

  中国网管联盟bitsCN.com

TAGs效率   索引   提高   利用       数据   使用   一个   查询   by   需要    
 上一篇:mysql存储过程写法—动态参数运用-PLSQL   下一篇:数据库引擎中重要的Discontinued Feature-PLSQL
利用索引提高SQL Server数据处理效率-PLSQL 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: