- - PR -
MSSQLのUPDATE文のパフォーマンス
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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' | ||||
|
投稿日時: 2005-12-31 20:50
(1) は TABLEA のフィールドをから取得してきてませんから、同じだとは言えませんよね。 UPDATE の場合は、制約チェック (FK とか色々) だとか諸々やることがあるので遅くなるのは当然ですね。 # その前に (1) は文法的にエラーですが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 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' だと早いのです。 この場合にも制約チェックの影響があるのでしょうか? | ||||
|
投稿日時: 2006-01-01 11:22
SELECT と比べて UPDATE が遅いのは制約だけでなく値のチェックもあるからなんでしょう。 (SELECT は今あるデータを取るだけですから) が、今回の場合、制約チェックなどは関係ないですね。 違うのは GETDATE() 関数を使っているか否かですから。 GETDATE() 関数をやめて固定値にすると早くなるということは、 GETDATE() 関数自体で時間を消費しているという結論になっちゃうような... 計測はしていませんが、そんなに差があるとは思えないんですが... 微少ならともかく。 このあたりは DB の専門家じゃないので判りません。(^^;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1