Sql Server奇怪的执行计划选择

时间:2016-12-21 13:19:27

标签: sql-server sql-execution-plan sql-tuning

我对sql server 2012 sp3有一个查询,它是通过一个应用程序动态构建的。我注意到一个由于执行计划不充分导致运行缓慢的情况,我试图弄清楚问题。

在这种情况下,正在构建的查询具有以下形式

Select some columns from 
(SELECT TOP 1 1 AS NEW FROM tr) AS AL 
JOIN 
(select some columns from a view join some tables
 where column = 'a' or column = 'b' column = 'c'...) t5
ON 1=1 WHERE [t5].[ROW_NUMBER] BETWEEN 0+1 AND 0+20 ORDER BY [t5].[ROW_NUMBER]

外部选择用于分页。标记为t5的内部选择在任何情况下单独执行时都会快速运行。然而,结合外部选择分页,它可能非常慢,取决于在其where语句中选择的值的数量以及它的选择性(获取的行数)。

我试图更改查询以提高性能但是当我这样做时,我破坏了应用程序构建的查询的性能,这种查询不是选择性的(获取多行)

从我看到的,执行计划取决于在where语句中选择的值。有没有办法帮助sql server选择正确的执行计划,以便它可以避免无用的行读取?

我很感激任何建议。

0 个答案:

没有答案