- PR -

MSSQLのUPDATE文のパフォーマンス

1
投稿者投稿内容
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-12-31 20:04
あるテーブル(TABLEA)に対して以下のSQL文を投げるとAは60secくらいかかるのですが
@に関しては一瞬で終わります。
文的には同じものですが、SELECTとUPDATE文でなぜここまで違うのでしょうか?
ご存知のかた、ご教授願えないでしょうか?
原因がまったく見当たりません。。。


テーブル名:TABLEA
フィールド:
 ID1→SQLの検索キー1
ID2→SQLの検索キー2
FIELDA→SQLで変更したい項目

SQL@
SELECT GETDATE() FROM TABLEA WHERE = '1' AND ID2 = '2'

SQLA
UPDATE TABLEA SET FIELDA = GETDATE() WHERE ID1 = '1' AND ID2 = '2'
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-31 20:50
引用:

Kiraさんの書き込み (2005-12-31 20:04) より:

文的には同じものですが、SELECTとUPDATE文でなぜここまで違うのでしょうか?

SQL(1)
SELECT GETDATE() FROM TABLEA WHERE = '1' AND ID2 = '2'

SQL(2)
UPDATE TABLEA SET FIELDA = GETDATE() WHERE ID1 = '1' AND ID2 = '2'


(1) は TABLEA のフィールドをから取得してきてませんから、同じだとは言えませんよね。
UPDATE の場合は、制約チェック (FK とか色々) だとか諸々やることがあるので遅くなるのは当然ですね。

# その前に (1) は文法的にエラーですが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2006-01-01 00:14
じゃんぬねっとさんお返事ありがとうございます。
すいません(1)は文法エラーでしたね。。。すいません。


(2)のSQLの補足なんですが


UPDATE TABLEA SET FIELDA = GETDATE() WHERE ID1 = '1' AND ID2 = '2'
だと遅いのですが、
UPDATE TABLEA SET FIELDA = '2005/12/31' WHERE ID1 = '1' AND ID2 = '2'

UPDATE TABLEA SET FIELDA = '2005/12/31 24:00:00' WHERE ID1 = '1' AND ID2 = '2'
だと早いのです。

この場合にも制約チェックの影響があるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-01 11:22
引用:

Kiraさんの書き込み (2006-01-01 00:14) より:

この場合にも制約チェックの影響があるのでしょうか?


SELECT と比べて UPDATE が遅いのは制約だけでなく値のチェックもあるからなんでしょう。
(SELECT は今あるデータを取るだけですから)

が、今回の場合、制約チェックなどは関係ないですね。
違うのは GETDATE() 関数を使っているか否かですから。

GETDATE() 関数をやめて固定値にすると早くなるということは、
GETDATE() 関数自体で時間を消費しているという結論になっちゃうような...
計測はしていませんが、そんなに差があるとは思えないんですが... 微少ならともかく。

このあたりは DB の専門家じゃないので判りません。(^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)