SQL Server 2000索引的能与不能(DO和DON’T)

日期: 2009-03-16 作者:Jeremy Kadlec翻译:曾少宁 来源:TechTarget中国 英文

在这三部分特性的第二部分,Edgewood Solutions公司Jeremy Kadlec概述了SQL Server 2000中最好和最差的索引实践。 索引能够做什么? Kadlec: 没有系统是一成不变的,因此我们必须不断地修改索引以支持使用变化。高选择性的(不同的)数据的索引字段。如果数据选择性低下,那么SQL Server将无法在索引中生成大量值。

如果是非常大型的数据库(VLDB),那么可以将数据和聚簇索引与非聚簇索引分开,并存储在其它物理硬盘上的独立文件组中。从整体角度上处理索引以便保证索引对应用一部分有益时不会对另一部分有害。平衡每个表的索引数目以便减少SQL Server在执行事……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在这三部分特性的第二部分,Edgewood Solutions公司Jeremy Kadlec概述了SQL Server 2000中最好和最差的索引实践。

索引能够做什么?

Kadlec:

  • 没有系统是一成不变的,因此我们必须不断地修改索引以支持使用变化。
  • 高选择性的(不同的)数据的索引字段。如果数据选择性低下,那么SQL Server将无法在索引中生成大量值。
  • 如果是非常大型的数据库(VLDB),那么可以将数据和聚簇索引与非聚簇索引分开,并存储在其它物理硬盘上的独立文件组中。
  • 从整体角度上处理索引以便保证索引对应用一部分有益时不会对另一部分有害。
  • 平衡每个表的索引数目以便减少SQL Server在执行事务处理时的工作量。这样将减少整体存储空间支持,同时在时间和I/O方面仍然实现高效的处理。
  • 同时,平衡还有助于保证新索引不会在对应用的一部分有益的同时损害另一部分的性能。要对索引进行全面的测试,并重新检查一个位置的修改不会损害应用另一部分。
  • 在测试阶段中检查查询计划,以保证索引可以改进查询时间以及预期的资源使用率。
  • 为每个索引选择恰当的填充因数。如果表内数据只会有很少的修改,那么索引就要配置一个高填充因数,如,接近于100%,这样将节省存储空间。如果表内数据会有许多的修改,那么我们可以选择一个较低的填充因数,如65%到85%,这样当数据添加到页时,索引重新建立的页划分将是最小的。
  • 定期使用DBCC SHOWCONTIG命令来检查表、索引或数据的碎片。根据碎片程度,定期重建索引。
  • 如果在短时期内,索引出现大量的碎片,那么我们需要检查数据是如何插入、更新以及删除的,以便确认我们是否需要一个较低的填充因数。同时,确定是否可以修改代码来减少碎片的数量。
  • 在索引创建、删除和/或重建时捕捉性能基线,以确定每个操作对性能的影响。
  • 在变更管理过程之后引进新索引测试和部署。保证用文档记录所有修改。
  • 按周、月或季度执行数据库维护。只有不断地维护,SQL Server才可以完美地运行。

索引不能做什么?

Kadlec:

  • 避免表出现热点。当所有事务都访问表的相同位置(如,表格末端)以及引发线路争夺问题时,就会出现。
  • 不要在查询中使用索引提示来替代SQL Server优化器索引选择,除非所有的选项都用完了。
  • 避免页切分。它是用在现有数据页空间无法再存储新记录行的时候。当出现这种情况时,SQL Server将把一半的数据转移到新的页面。最终结果是,原先的页面存储了一半数据而新的页面存储了另一半数据。这是一个非常耗费资源的操作,因为SQL Server必须完成记录行的存储及后续处理。
  • 不要建立或维护不必要的重复索引。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐

  • 分析SQL Server级联删除的实现

    SQL Server 2000与Oracle 8i相比,SQL Server级联删除有太多的限制,本文就为您介绍SQLServer级联删除的实现方法,供您参考。

  • 从SQL Server中的数据更新到Oracle表中

    我有两个客户端服务程序。一个用的是Oracle7数据库,而另一个用的是SQL Server 2000。现在我想把SQL Server 2000中的某些表数据更新到Oracle数据库表中……

  • 在SQL Server 2000的视图中小心使用*符号(一)

    有些朋友看到这个标题可能会有疑问,难道在视图中使用*符号还有何要注意的地方吗?对于这个问题,我们先不必回答,先看一下文中的例子吧。

  • SQL Server索引设计和调优技巧大全

    本技术专题主要围绕sql server设计这个话题展开,侧重介绍了sql server集簇索引的设计、如何创建sql server索引、如何优化索引、索引的能与不能、处理sql server 2000索引碎片技巧以及维护sql server索引以实现查询优化等等。