我们在SQL Server 2012上运行的查询看起来像这样:
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY t1.DateEntered DESC) AS RowNumber,
MANY_FIELDS
FROM MANY_JOINED_TABLES
WHERE MANY_CONDITIONS
) AS sub1
WHERE RowNumber BETWEEN (0 + 1) AND (0 + 10)
ORDER BY RowNumber
执行大约需要3-4秒。
我希望最后一个WHERE子句中的1和10是变量,但是当我在语句之前使用DECLARE来声明变量(甚至是一个从未使用过的随机变量)时,查询只是旋转和旋转而永远不会完成。
要清楚,除了第一行之外,这段代码完全相同:
DECLARE @x int
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY t1.DateEntered DESC) AS RowNumber,
MANY_FIELDS
FROM MANY_JOINED_TABLES
WHERE MANY_CONDITIONS
) AS sub1
WHERE RowNumber BETWEEN (0 + 1) AND (0 + 10)
ORDER BY RowNumber
关于为什么的任何想法?