OKこれで、テーブル値関数とクロス適用を提案する記事を一通り読んだところ、スカラーudfよりも優れたパフォーマンスが得られました。私は両方の方法で機能を書いて、どれが良いのかをテストしたいと思っていましたが、どちらを使うべきかを理解することができません。ScalarのパフォーマンスとSQL Serverのテーブル値関数の比較
私はSQL Server 2005を使用しています。データベースエンジンチューニングアドバイザーの推定実行計画、実際の実行計画、および分析クエリを実行しようとしましたが、何を教えているのかわかりません。
showplan_allをオン/オフにすると、テーブルベースの関数がより多くのCPU 1.157e-06 vs 8.3e-05を使用するように見えますが、テーブル関数の総サブツリーコストは0.000830157対0.01983356です。
テーブル値関数のクエリコストも、スカラー値よりもコストが高いようです。私はそれがより良い選択肢であると考えられていましたが。
私はそれが自分自身であることを証明したいと思いますが、私はこれらのツールで何を探すべきかわからないので、どんな提案も感謝します!
暦日に基づいて学年値(データベースに設定された日付範囲に基づいて)を取得する必要があります。そのため、関数の内容が以下のようになります。今年は他のクエリにも役立ちます..
CREATE FUNCTION fn_AcademicYear
(
-- Add the parameters for the function here
@StartDate DateTime
)
RETURNS
@AcademicYear TABLE
(
AcademicYear int
)
AS
BEGIN
DECLARE @YearOffset int, @AcademicStartDate DateTime
-- Lookup Academic Year Starting Date
SELECT @AcademicStartDate = CONVERT(DateTime,[Value])
FROM dbo.SystemSetting
WHERE [Key] = 'AcademicYear.StartDate'
SET @YearOffset = DATEPART(YYYY,@StartDate) - DATEPART(YYYY,@AcademicStartDate);
-- try setting academic looking start date to year of the date passed in
SET @AcademicStartDate = DATEADD(YYYY, @YearOffset, @AcademicStartDate);
IF @StartDate < @AcademicStartDate
BEGIN
SET @AcademicStartDate = DATEADD(YYYY, @YearOffset-1, @AcademicStartDate);
END
INSERT @AcademicYear
SELECT YEAR(@AcademicStartDate)
RETURN
ありがとう!!
好奇心がそそら - 「YYYY」は、「Year」よりも読みやすくなっていますか? –
私は本当にそれについて考えていないし、他の人の関数からその構文を取った:)しかし、イエス年は読みやすくなります。 – Jen