- - PR -
SQLのパフォーマンス (結合 vs 副文)
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-11-13 03:43
現在、SQL 2005にてSSISで夜間バッチでながそうとしている
SQLのJOBがあるのですが、結構時間がかかり 解析したところ(作成者は私と別人ですでに会社を去っています) 以下のように、あるテーブルをUPDATEするのに 自分自身を呼び出して以下のように処理してました ====SQL1==== UPDATE SALES_HISTORY SET VALID_FLAG='Y' FROM ( SELECT ID FROM TMP_SALES_HISTORY ) A WHERE SALES_HISTORY.ID= A.ID ===SQL2=== UPDATE SALES_HISTORY SET VALID_FLAG='Y' FROM ( select min(ID) ID, SALES_NUMBER ,SITEN_KEY from SALES_HISTORY group by SALES_NUMBER,SITEN_KEY having count(SALES_NUMBER) = 1 ) A WHERE SALES_HISTORY.ID= A.ID これらは複文にしてしまったほうがいいのではと思ってます よくみると結局、selectをはしらせているので SQL1は UPDATE SALES_HISTORY SET VALID_FLAG='Y' WHERE SALES_HISTORY.ID in (SELECT ID FROM TMP_SALES_HISTORY) SQL2は UPDATE SALES_HISTORY SET VALID_FLAG='Y' WHERE SALES_HISTORY.ID in (select min(ID) ID from SALES_HISTORY group by SALES_NUMBER,SITEN_KEY having count(SALES_NUMBER) = 1 ) のような感じですが、普通副文(サブクエリー)をつかうほうがおそくなるという のはきいたことはありますが、上記のようなケースではどうなのでしょうか? アドバイスいただけると幸いです。 | ||||
|
投稿日時: 2006-11-13 09:52
実際に試せば良いのではないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-11-13 10:00
ボトルネックがどこにあるのか検証していない段階で、どちらが速いかどうか、という
議論をするのはあまり意味がありません。ですので、まず検証してみることです。 それはそれとして、SQLとしては後者の方が自然だと思います。ただin句よりはexists 句を使ったほうがいいと思いますが。 | ||||
1
