バッチが大変遅いという相談。
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はホスト変数
もうちょっといい書き方ないかな。あ、テーブルはそれぞれ数十万〜百数十万件になります。