微软MVP及畅销书《Hitchhiker's Guide SQL Server》的作者Bill Vaughn简要给出了SQL Server 2008的索引使用技巧。该主题基于Kimberly Tripp和Paul Randall(这两位是SQL Server高可用性和性能方面的专家)的建议。
下面是主要的建议:
优化行大小:SQL Server 2005(及后续版本)支持8k的列。这意味着一行可以超过80k大小。这有意义么?哦,通常情况下没有。对行大小的管理与效率同样重要。如何提高性能并充分利用空间呢?方法就是当8k的页被多个行塞满的时候,要确保几乎没有空间浪费。这意味着如果行大小超过(或者接近)4k时,一页只适合一行,这样该页大约有4k的空间就浪费了。第二个问题是索引页的数量也必须增加以寻址这些页。
这是SQL Server 2008的新特性,它使我们可以向索引增加WHERE子句,这样就可以将索引聚焦到大多数重要的行上。
选择性:当查询优化器(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命令行界面的改进脚本支持。