专家详解SQL Server 2000创建和优化索引

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

索引SQL Server数据库既是艺术也是技术。我们必须根据设计和编码来选择正确的索引。但是,当测试索引设计时,我们可能发现它对系统性能的提高并没有达到我们的要求。我们必须通过学习索引字段、聚簇索引、主键以及索引配置来创建最佳设计的SQL Server索引。

让我们先来看一些设计索引时的常见问题: 用户如何访问数据? 指定一个值访问一行记录指定一个值访问多行记录指定多个值访问多行记录访问不同范围的记录,如指定一段时间哪些是常见索引字段? 主键外键用于JOIN、WHERE、ORDER BY、GROUP BY、HAVING和其它子句中的字段应该选择哪种索引? 聚簇索引——这是一种当数据在表格中物理……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

索引SQL Server数据库既是艺术也是技术。我们必须根据设计和编码来选择正确的索引。但是,当测试索引设计时,我们可能发现它对系统性能的提高并没有达到我们的要求。我们必须通过学习索引字段、聚簇索引、主键以及索引配置来创建最佳设计的SQL Server索引。

让我们先来看一些设计索引时的常见问题:

用户如何访问数据?

  • 指定一个值访问一行记录
  • 指定一个值访问多行记录
  • 指定多个值访问多行记录
  • 访问不同范围的记录,如指定一段时间

哪些是常见索引字段?

  • 主键
  • 外键
  • 用于JOIN、WHERE、ORDER BY、GROUP BY、HAVING和其它子句中的字段

应该选择哪种索引?

  • 聚簇索引——这是一种当数据在表格中物理排序时使用的索引。表格不可能有超过一种排序方式。一个很好的候选簇索引是主键、唯一识别每一行的字段,或者支持范围的字段,如一个日期。
  • 非聚簇索引——它是用于基于聚簇索引的有序数据上使用,或者在没有簇索引时单独基于数据使用。一个好的候选非聚簇索引可以是外键,或者在JOIN、WHERE、ORDER BY、GROUP BY、HAVING和其它子句中使用的字段。
  • 不使用索引——在只有固定少数行的表中不使用索引,如查找表,在SQL Server中直接查询会比使用索引更快。

我总是需要使用聚簇索引吗?

  • 不,我们并不“总”得使用它。使用的比例是80:20:虽然不是所有,但大多数环境下我们都必须使用聚簇索引来对数据进行物理排序。典型的,当表中有大量的事务,并且当使用SQL Server来维护聚簇索引消耗过多资源时,我们就不使用它们。虽然如此,我也必须提示一点,我个人见过许多按照惯例不使用聚簇索引的大型表会因为聚簇索引而提升性能。其中实质好处是数据访问时间改进和最小化I/O资源。这是一个伟大的胜利!

我们必须总使用主键吗?

  • 不,我们并不“总”得使用它。根据我的个人经验,90%以上的情况下我们需要一个主键来维持引用完整性,或支持第三方的数据比较工具。

索引中应用有多少个字段呢?

  • 如果不确定确切的索引数,最佳的方法可能就是每个索引用一个字段。
  • 如果索引中的字段匹配多个检索或频繁进行的关键检索中的字段顺序,那么每个索引包含多个字段是有用的。唯一的说明是索引的统计信息只基于第一个字段,而不是整组索引。

索引还有其它什么配置

  • 索引顺序——我们可以创建递增或递减顺序的索引。
  • 填充指数——为每一个索引指定填充因数,以确定索引在创建或重建时在每个索引页预留多少空余空间。
  • 统计信息——保证手动创建索引统计信息,或者允许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索引以实现查询优化等等。