我注意到包含 ROW_NUMER() 代码的准备好的语句经常被重新编译,尽管它们的 SQL 代码没有改变。
(来自《Inside Microsoft SQL Server 2008: T-SQL Querying》一书中的示例):
WITH SalesRN AS (
SELECT
ROW_NUMBER() OVER (ORDER BY qty, empid) AS rownum,
empid,
mgrid,
qty
FROM
dbo.SalesOrder
)
SELECT
rownum,
empid,
mgrid,
qty
FROM
SalesRN
WHERE
rownum > 100 * (?-1)
AND rownum <= 100 * ?
ORDER BY
rownum
我正在使用最新版本的 jTDS JDBC 驱动程序 (1.2.3) 并注意到 SQL Server 2005 和 2008 都存在问题。
有人知道发生了什么吗?为什么它会重新编译语句,尽管它们的代码没有改变?对于我的一个查询,重新编译大约需要 1200 毫秒,与低至 31 毫秒的执行时间相比,这是很多的。