2

endDate が null の場合、このクエリには長い時間がかかります (case ステートメントについては、case ステートメントの前は高速だったと思います)

SELECT * 
FROM HastaKurumlari
WHERE CONVERT(SMALLDATETIME,'21-05-2009',103) 
BETWEEN startDate 
    AND (CASE WHEN endDate IS NULL THEN GETDATE() ELSE endDate END) 

endDate が null の場合、高速化するには何を使用すればよいですか?

4

4 に答える 4

1

合体機能を試すことができます:

select * 
from HastaKurumlari
where convert(smalldatetime, '21-05-2009', 103) 
    between startDate and coalesce(endDate, getdate());

確実にする唯一の方法は、代替手段を試して、各クエリに対して生成された実行計画を表示することです。

于 2009-05-11T11:50:46.513 に答える
1

パフォーマンスが重要な場合はnull、オープンな end-date には使用しないでください。代わりに、サポートされている最大の日時を使用してください (おそらく多くの 9)。

変換も個別に行います。

DECLARE @when datetime
SET @when = CONVERT(SMALLDATETIME,'21-05-2009',103) 

SELECT * 
  FROM HastaKurumlari
WHERE @when
BETWEEN startDate AND endDate

上記とあなたのオリジナルにはまだ少し違いがあります。チェックの意図を説明していただければGETDATE()、少し整理 (read:fix) できるかもしれません。

于 2009-05-11T11:51:30.710 に答える