首页  编辑  

调试SQL语句


调试SQL语句

本节提供了一些SQL Server工具的信息,你可以用这些工具来调试Transact-SQL语句。欲了解关于调试SQL Server数据库的详细信息,请参阅本卷前面的“性能调节部分”

SQL Server Query AnalyzerSQL Server查询分析器)

你可以利用SQL Server查询分析器的图形化特性来更多的了解优化器是如何处理你的语句的。

SQL Server Profiler

该图形化工具实时捕获服务器活动的连续记录。SQL Server Profier监视许多不同的服务器事件和事件类别,用用户指定的标准来过滤这些事件,并且输出到一个显示在屏幕上的轨迹,一个文件,或者另一个SQL Server上。

SQL Server Profiler 可以用来:

  • 监视SQL Server的性能。
  • 调试Transact-SQL语句和存储过程。
  • 识别执行很慢的查询。
  • 通过捕捉导致一个特殊问题的所有事件查找SQL Server中的问题,然后在一个测试系统上重放这一系列事件来重现并且孤立问题。
  • 通过单步执行语句,在项目的开发阶段测试SQL语句和存储过程,确保代码像预期的那样工作。
  • 在产品系统上捕捉事件,并且在测试系统上重放捕捉的事件,以此为测试或者调试的目的重现产品环境中发生的事情。在独立的系统上重放捕捉的事件可以让用户继续使用产品系统,不会造成冲突。

SQL Server Profiler为一系列扩展存储过程提供了一个图形用户界面。你也可以直接使用这些扩展存储界面。因此,你可以创建自己的利用SQL Server Profiler扩展存储过程的应用程序来监视SQL Server。

SET语句

SET语句可以在你的工作会话、运行中的触发器或者存储过程的生命期内设定SQL Server查询处理选项。

SET FORCEPLAN ON语句强制优化器按照表在FROM子句出现的顺序处理连接,同Oracle优化器所用的ORDERED提示是类似的。

SET SHOWPLAN_ALL和SET SHOWPLAN_TEXT语句只返回查询或者语句执行方案的信息,而不会执行查询或者语句本身。要执行查询或者语句。需要把适当的显示方案的语句设定为OFF。然后就可以执行查询或者语句了。SHOWPLAN语句的结果跟Oracle的EXPLAIN PLAN工具是类似的。

如果SET STATISTICS PROFILE是ON,则每一个执行的查询除了返回正常的结果集合,还加上一个额外的结果集合,该集合显示了一个查询执行的快照。其它选项包括SET STATISTICS IO和SET STATISTICS TIME。

Transact-SQL语句处理包括两个阶段,编译和执行。NOEXEC选项编译每一个查询但不执行该查询。在NOEXEC设定为ON以后,后来的语句将不再执行,一直到NOEXEC设定为OFF。

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,则强制该表进行扫描,而为1的index_id则强制使用一个分簇的索引,如果有的话。这跟Oracle中使用的索引提示是类似的。

SQL Server的FASTFIRSTROW指示优化器使用一个未分簇的索引,如果它的列顺序同ORDER BY子句相匹配的话。该提示同Oralce中的FIRST_ROWS提示是类似的