InfoQ

新闻

SQL Server 2008索引使用技巧

作者 Al Tenhundfeld译者 张龙 发布于 2008年8月27日 上午5时14分

社区
.NET
主题
SQL Server
标签
SQL Server 2008

微软MVP及畅销书《Hitchhiker's Guide SQL Server》的作者Bill Vaughn简要给出了SQL Server 2008的索引使用技巧。该主题基于Kimberly TrippPaul Randall(这两位是SQL Server高可用性和性能方面的专家)的建议。

下面是主要的建议:

  • 页(page)密度
    优化行大小:SQL Server 2005(及后续版本)支持8k的列。这意味着一行可以超过80k大小。这有意义么?哦,通常情况下没有。对行大小的管理与效率同样重要。如何提高性能并充分利用空间呢?方法就是当8k的页被多个行塞满的时候,要确保几乎没有空间浪费。这意味着如果行大小超过(或者接近)4k时,一页只适合一行,这样该页大约有4k的空间就浪费了。第二个问题是索引页的数量也必须增加以寻址这些页。
  • 过滤的索引
    这是SQL Server 2008的新特性,它使我们可以向索引增加WHERE子句,这样就可以将索引聚焦到大多数重要的行上。
  • 选择性(Selectivity)
    选择性:当查询优化器(query optimizer,即QO)读取SQL时,选择性的程度决定了索引是否应该用来执行该操作。通过对索引的Statistics(或者“stats”,一个索引可以拥有一个或者多个stats)进行处理分析,QO可以作出决定。基本上,它会权衡使用索引来遍历选择的行或者对表进行扫描这两种方式。Kimberly采用的例子使这一切变得很明朗,但我们却感到惊讶:“当行数(由查询选择的)大约是表中的数据页的1/4时,索引并没有起到什么作用,这时对表进行扫描来获取选择的行效率更高。这通常发生在取出的行数不到表中总行数的5%的情况下...”

SQL Server 2005中关于索引统计、列选择、索引碎片及锁的标准实践依然可用。

Tripp和Randal也认为DTA, a.k.a. Data Engine Tuning Advisor是个有价值的工具。SQL Server 2008已经更新了DTA以提供新的特性,包括改进的工作量解析、增强的可伸缩性、多数据库调校、通过dta命令行界面的改进脚本支持。

查看英文原文:SQL Server 2008 Indexing Tips And Tricks

没有回复

回复

独家内容

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。

AtomServer:数据分发的发布动力(第二部分)

在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。

架构师(试刊第二期)

InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!

一种正规的性能调优方法:基于等待的调优

在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。

Java程序员ActionScript 3入门

通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。

浅谈如何创建Rails应用

本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。

Alexandru Popescu谈InfoQ.com网站架构

InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。

揭示常见的重构误区

相对于Java,.NET在持续重构方面所给与的重视仍然少为人知,大多数人对于重构是否真正属于开发过程,以及如何将其应用到开发过程中持观望态度。Danijel Arsenovski试图为你揭示这些谜题。