kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

単独で動かすといいんだけどね。

バッチが大変遅いという相談。

CREATE TABLE dbo.Table_1
	(
	id nvarchar(10) NOT NULL,
	col1 nvarchar(50) NULL,
	col2 nvarchar(50) NULL
	)  
CREATE TABLE dbo.Table_2
	(
	id nvarchar(10) NOT NULL,  //Primary Key
	col3 nvarchar(50) NULL,
	col4 nvarchar(50) NULL
	)  
CREATE TABLE dbo.Table_3
	(
	id nvarchar(10) NOT NULL,  //Primary Key
	col5 nvarchar(50) NULL,
	col6 nvarchar(50) NULL
	)  
#idには同じ値が入っているとします。
  • Table_1を逐次アクセスしてレコードを取得
  • idがTable_2,3のPrimary Keyなので、selectでそれぞれアクセス。

いやそれ、遅いだろ。そしてそれぞれ単独のSQLでは全然問題ないので、個別に見ただけじゃわからない。パフォーマンス分析もしないので、ますます何が悪いのかわからないという。
Table_2,Table_3がprimary key使って1レコードしかないという前提でアクセスできるならば、こんなのはどうだろう。

select a.col1,a.col2,b.col3,b.col4,c.col5,c.col6 from table_1 a,
  (select * from table_2 where id = $1) b,
  (select * from table_3 where id = $1) c,
  where a.id = $1;
#$1はホスト変数

もうちょっといい書き方ないかな。あ、テーブルはそれぞれ数十万〜百数十万件になります。