WEB开发网
开发学院数据库MSSQL Server 如何使用一个SQL Server计划指南来调整查询 阅读

如何使用一个SQL Server计划指南来调整查询

 2009-01-05 10:18:37 来源:WEB开发网   
核心提示: 图1然而,尽管只有两行存在于这个ProductID的Sales.SalesOrderDetail,如何使用一个SQL Server计划指南来调整查询(2),针对ProductID = 897的第二次执行也还是使用了一次表扫描,在这个例子中,通过观察执行计划,我们可以看到对一张表的扫描可以用

如何使用一个SQL Server计划指南来调整查询

图1

然而,尽管只有两行存在于这个ProductID的Sales.SalesOrderDetail,针对ProductID = 897的第二次执行也还是使用了一次表扫描,在这个例子中,一个索引查找将是一个更好的选择,但是现在我们依赖于这个执行计划,该计划产生于第一次执行准备查询的时候。在一些情况下,这将成为一个棘手的性能问题,一个数据库管理员将增加一个重新编译的选项,促使优化器重新编译该语句并且每次它执行时都得到优化。

创建SQL计划指南解决了不能或不允许把提示怎发到数据库查询中的问题。下面的计划指南创建并命名为GETSALESPRODUCTS_RECOMPILE_Fix,它把重新编译应用到那个给我们带来悲痛的SELECT语句。

   USE AdventureWorks
  GO
  EXEC sp_create_plan_guide
  @name = N'GETSALESPRODUCTS_RECOMPILE_Fix',
  @stmt = N'SELECT * FROM Sales.SalesOrderDetail WHERE ProductID = @ProductID',
  @type = N'SQL',
  @module_or_batch = NULL,
  @params = N'@ProductID int',
  @hints = N'OPTION (RECOMPILE)'
  GO

重新运行这些查询,适当的计划指南促使SQL语句重新编译,产生最理想的查询计划,由此在ProductID中实现传递。这样就避免了更改任何的代码。通过观察执行计划,我们可以看到对一张表的扫描可以用于ProductID = 870,但是一个索引的查找可以用在ProductID = 897。一个文件性能分析(profiler trace)也显示在该语句在执行之前被重新编译了:

Tags:如何 使用 一个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接