优化 SQL 语句 本节提供了用于优化 Transact-SQL 语句的一些 SQL Server 工具的信息。有关优化 SQL Server 数据库的详细信息,请参见本卷前面的“性能优化”。 可以使用 SQL Server 查询分析器的图形显示计划功能,了解优化程序处理语句的详细信 此图形工具可以实时地捕获服务器活动的连续记录。SQL Server 事件探查器监视多个不 同的服务器事件和事件类别,使用用户定义的标准筛选这些事件,并把跟踪记录输出到屏幕、 SQL Server 事件探查器可用于: 监视 SQL Server 的性能。 调试 Transact-SQL 语句和存储过程。 确定执行缓慢的查询。 解决 SQL Server 中的问题。通过捕获引起某一特定问题的所有事件,然后在测试系统上 重现这些事件,以重复和分离该问题,达到解决问题的目的。 在项目开发阶段,通过单步执行语句,每次一行,测试 SQL 语句和存储过程,来确认代 在生产系统上捕获事件,并在测试系统上重现所捕获的那些事件,从而为测试或调试重建 了生产环境中所发生的事件。通过在其它系统中重现所捕获的事件,用户可继续使用生产系统 SQL Server 事件探查器给一组扩展存储过程提供了图形用户界面。也可以直接使用这些 扩展存储过程。因此,可以创建自己的应用程序,它使用 SQL Server 事件探查器扩展存储过 SET 语句可以为工作会话期、触发器或存储过程运行期设定 SQL Sever 查询处理选项。 SET FORCEPLAN ON 语句强制优化程序按照表在 FROM 子句中出现的顺序处理联接,类似 SET SHOWPLAN_ALL 和 SET SHOWPLAN_TEXT 语句只返回查询或语句的执行计划信息,但不 执行查询或语句。要运行查询或语句,将相应的显示计划语句设为 OFF。然后,查询或语句就 会执行。SHOWPLAN 选项与 Oracle EXPLAIN PLAN 工具提供的结果类似。 使用 SET STATISTICES PROFILE ON,每个执行的查询返回标准的结果集,然后,返回附 加结果集(给出查询执行的事件探查)。其它选项包括 SET STATISTICS IO 和 SET Transact-SQL 语句处理包括分两步,即编译和执行。NOEXEC 选项编译每个查询,但不 执行。NOEXEC 设为 ON 时,不执行随后的语句(包括其它 SET 语句),直到 NOEXEC 设为 SET SHOWPLAN ON SET NOEXEC ON go SELECT * FROM DEPT_ADMIN.DEPT, STUDENT_ADMIN.STUDENT WHERE MAJOR = DEPT go STEP 1 The type of query is SETON STEP 1 The type of query is SETON STEP 1 The type of query is SELECT FROM TABLE DEPT_ADMIN.DEPT Nested iteration Table Scan FROM TABLE STUDENT_ADMIN.STUDENT Nested iteration Table Scan Oracle 需要使用提示,来调整基于开销的优化程序的操作和性能。Microsoft SQL Server 基于开销的优化程序不需要使用提示,来协助其查询评估过程。但是在某些情况下, INDEX = {index_name | index_id} 提示指定了该表使用的索引名或 ID。 index_id 为 0,就会强制一个表扫描,而当 index_id 为 1,则强制使用聚集索引(如存在)。这和 如果其列顺序和 ORDER BY 子句匹配,SQL Server FASTFIRSTROW 提示就会指示优化程序 使用非聚集索引。这个提示的运行方式和 Oracle FIRST_ROWS 提示类似。