FULL JOINで2.5秒、INNER、RIGHTまたはLEFT JOINで40秒かかるクエリがあります。内/右/左ジョインがFULL JOINよりも14倍遅くなることはありますか?
ここにクエリがあります。副問合せ(2回実行)は、それ自身で1.3秒しかかかりません。日時のうち、MM文字列:
SELECT T1.[time], T1.Total, T1.rn, T2.[time], T2.Total, T2.rn
FROM
(
select [time], MAX(ComputedValue) as Total, row_number() over (order by [time]) as rn
FROM
(
select SUBSTRING(CONVERT(CHAR(10), IntervalStartTime, 108), 0, 6) as [time], ComputedValue
from LoadTestTransactionSample
where LoadTestRunId=285
and CounterName='Total Transactions'
and TransactionName='Export'
) foo
group by [time]
) T1
_____ JOIN
(
select [time], MAX(ComputedValue) as Total, row_number() over (order by [time]) as rn
FROM
(
select SUBSTRING(CONVERT(CHAR(10), IntervalStartTime, 108), 0, 6) as [time], ComputedValue
from LoadTestTransactionSample
where LoadTestRunId=285
and CounterName='Total Transactions'
and TransactionName='Export'
) foo
group by [time]
) T2
ON T1.rn = T2.rn - 1
select SUBSTRING
ビットだけHHを得ています。 LoadTestTransactionSample
は、実際には8つのテーブルを結合するVIEWです。 (データベースはVisual Studio負荷テスト結果ストアです)。ここではその(関連)カラムです:
LoadTestRunId INT NOT NULL
CounterName NVARCHAR(255) NOT NULL
TransactionName NVARCHAR(64) NOT NULL
IntervalStartTime DATETIME NOT NULL
IntervalEndTime DATETIME NOT NULL
ComputedValue REAL
A FULL JOINを返します余分な不要な行、私は正しい答えを得るために権利を行うに参加する必要がありますか。
私は本当に(私は1つを持っている:テーブル変数使用SQL Server 2012の分析関数「LAG」へ
プリフェッチサブクエリ、a1ex07 @おかげで)解決
を探していないよと、単にいくつかの理解
これらの結合タイプ間でパフォーマンスが極端に異なる可能性があるのは、です。
EDIT: はここslow right join query planとfast full join query planです。彼らはスクリーンショットを投稿するには大きすぎます。
EDIT 2: 実際には、クエリ・プランは、右を持っているが、45%でJOINとFULLは、(実際に、それは悪いことよりも99%/ 1%を終わる)全く不正確であることが判明した55%、で登録しよう。私は実際の実行統計に頼らなければならないということです。
EDIT 3:遅いRIGHTため 統計は、JOIN:
(40 row(s) affected)
Table 'LoadTestPerformanceCounterCategory'. Scan count 0, logical reads 37556, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounter'. Scan count 0, logical reads 176464, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestScenario'. Scan count 0, logical reads 176464, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestCase'. Scan count 0, logical reads 176464, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'WebLoadTestTransaction'. Scan count 0, logical reads 13411100, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterInstance'. Scan count 0, logical reads 36563718, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterSample'. Scan count 19721, logical reads 269657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestRunInterval'. Scan count 41, logical reads 205, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 36754 ms, elapsed time = 36763 ms.
統計FULL速いが、JOINのために:
(41 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterCategory'. Scan count 0, logical reads 1832, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounter'. Scan count 0, logical reads 8608, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestScenario'. Scan count 0, logical reads 8608, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestCase'. Scan count 0, logical reads 8608, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'WebLoadTestTransaction'. Scan count 0, logical reads 654200, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterInstance'. Scan count 0, logical reads 1783596, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterSample'. Scan count 962, logical reads 13154, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestRunInterval'. Scan count 2, logical reads 10, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 1950 ms, elapsed time = 1944 ms.
RIGHTを大規模により読み込み、以上のスキャンよりもやっているJOIN明らかに類似したクエリプランにもかかわらず、FULL JOIN。
作業台(FULL JOINで)ヒント?それは一時テーブルですか?
これは、クエリオプティマイザが壊れていることを示唆しているようですか?
であなたのクエリプラン/表示の統計情報を設定してご覧ください。 DDLスクリプトを使用してスキーマとデータを複製することができなければ、どの答えも基本的には推測になります。また、これらのパフォーマンスの数字は、後続のクエリと同じように最初のクエリで異なりますか?これは、キャッシュが関与していることを示しています。 – Heather
Heatherは、1-2-3-4を実行してから4-3-2-1を入力し、 –
を比較することを意味します。また、クエリの各バージョンはキャッシュ内に独自のクエリプランを生成します。同時にリフレッシュされます。これは時々パフォーマンスの問題を引き起こす可能性があります。 –