0
に挿入するのに長い時間がかかる:それは私が次のクエリを持つ一時テーブル
if object_id('tempdb..#tAJ88') is not null
drop table #tAJ88
create table #tAJ88 (
conv_raw_AJ88_ECO_key int,
case_id numeric(14,0),
account_key int,
account_period_key int,
aj_number varchar(25),
county_code varchar(25)
)
insert into #tAJ88(conv_raw_AJ88_ECO_key,account_key,account_period_key,aj_number,county_code)
select ac.conv_raw_AJ88_ECO_key,a.account_key, ap.account_period_key, ac.aj_number, ac.county_code
from [Conv].[dbo].[conv_raw_AJ88_ECO] ac
inner join [IT].[dbo].[entity_identifier] ei on ei.identifier_value = ac.account_number
and ei.identifier_type_key = @MITS
inner join [IT].[dbo].[account_x_entity_id] axe on axe.entity_identifier_key = ei.entity_identifier_key
inner join [IT].[dbo].[account] a on a.account_key = axe.account_key
and a.account_type_key = (select account_type_key from [IT].[dbo].[r_account_type] where code = ac.tax_type)
inner join [IT].[dbo].[account_period] ap on ap.account_key = a.account_key
and cnsd.NEXT_STEP_NAME not in ('A','B')
where (convert(datetime, substring(ac.periods,4,4) + '-' + substring(ac.periods,1,2) + '-01') >= ap.period_begin_dt and convert(datetime, substring(ac.periods,4,4) + '-' + substring(ac.periods,1,2) + '-01') <= ap.period_end_dt)
and len(rtrim(substring(ac.periods,4,4))) = 4
クエリは、SELECT文からデータを挿入します。 select文の実行には1秒しかかからず、select文には1500レコードしか表示されません。ただし、一時表に挿入しようとすると、10分以上かかります。私は前にこの問題を見たことがない。これは技術的な問題で、十分なディスク容量がない場合や、重要ではないインデックス作成に関連する場合があります。
クエリで1500を超える結果が返されることはありますが、実行するとSQLクライアントによって制限が追加されますか? – Tobb
2つのクエリのクエリ実行計画を見てください。それ自体で選択するもの。そして、挿入のためのもの...選択してください。 –
Kendra Little at sqlworkbooks.comは数週間前にストアドプロシージャの同じスコープ内で作成された一時テーブルの更新が挿入されたすべての行に対してディスクIOアクセスを行うMSSQLの問題を強調したウェブキャストを持っていました。あなたは特に言いませんでしたが、これをストアドプロシージャとして実行している場合、スコープを変更してこの大きな減速問題を回避するために、insertをsp_executesqlコマンドにラップすることができる修正プログラムの概要を説明しました。 –