ROW_NUMER() コードを含む準備済みステートメントは、SQL コードが変更されていないにもかかわらず、しばしば再コンパイルされることに気付きました。
(Book 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 の両方に問題があることに気付きました。
誰が何が起こっているのか手がかりを持っていますか? コードが変更されていないのに、ステートメントを再コンパイルするのはなぜですか? 私のクエリの 1 つでは、再コンパイルに約 1200 ミリ秒かかります。これは、31 ミリ秒という短い実行時間に比べてかなり長いです。