我对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选择正确的执行计划,以便它可以避免无用的行读取?
我很感激任何建议。