T-SQL 是一种允许您以逻辑方式设计请求的语言。这里所说的“逻辑”的意思是,当编写查询时,您指定的是希望获得什么 结果,而不是希望以何种方式 获得结果。对如何处理查询进行设计是查询优化器的工作。您所遇到的需要 T-SQL 解决方案的每个问题通常都有许多不同的解决方案,它们最终会返回同样的结果。在理想情况下,假设有两个执行同一任务的不同查询,优化器会为二者生成相同的执行计划,最优化的计划。SQL Server 开发组似乎正在朝这个方向努力。利用 SQL Server 的每个发行版本,优化器会设计出更高级、更有效的计划,执行同一任务的不同查询使用这个相同计划的可能性也在提高。

  不过,在许多情况下,您编写查询的方式仍然会动态地影响查询的性能。为了使优化器在不同的计划中作出选择并找到一个高效的计划,您需要完成一些准备工作- 也就是,创建索引。大多数人是将普通索引作为其数据库优化的一部分创建的,但我还没有看到索引视图的广泛实现。索引视图可以极大地提高查询性能,尤其在聚合数据的时候。在某些情况下,对视图进行创建并索引后,您甚至不需要更改引用基表的原始查询,这是因为优化器的智能程度足以使用那些索引。

  SQL Server 2000已经开始支持索引视图。视图意味着一个对物理表的虚拟查询。索引视图中可以包含各种连接、聚合,这样使用索引进行查询时就不需要再次给出这些查询条件了。默认情况下,数据库引擎总是展开非索引视图中潜在的select语句,然后在基础物理表上执行。开发者不能在查询中在没有引用视图的情况下使用索引视图。优化器通过比较视图的查询树和提交的查询树,来确定是使用基础物理表还是索引视图。在查询语句中使用INDEX指示可以强制优化器使用某个索引。但是对于索引视图,必须使用NOEXPAND指示来避免视图索引展开,保证优化器使用索引视图而不是基础物理表上的索引。