2011-06-30 9 views
4

2350万行と20列のテーブルがあります。テーブルの1つをnullに設定しました。このクエリは完了するまでに1時間かかりました。確かに、私は驚くほど高速なデータベースサーバーはありませんが、この更新時間は通常ですか?私は更新プログラムを実行したときにこのテーブルのインデックスを持っていませんでした。どれくらい助けてくれたでしょうか?長いクエリ時間

ありがとうございます!

+0

すべての行を更新していた場合、その時間枠にはショックを受けません。 あなたのテーブルを索引付けしてください(まだない場合)。 – Limey

+0

@limneyのインデックス作成は私の答えで言ったように助けにならない。 – diracdeltafunk

+0

@インデックスを作成すると、挿入/更新がさらに遅くなります – Magnus

答えて

3

これは、すべての行を更新したことを考慮すると、インデックスは役に立たなかったでしょう。

同時に読み込みが行われましたか?更新により、たとえ短くても行レベルのロックが発生すると、多くのトラフィックが発生し、トランザクションログで待機する可能性があります。

+0

ほかにはDB内で何も起こっていません。 – divided

+0

ID列のユニークなインデックスが役立つでしょうか? – divided

+0

いいえ、どこにも 'WHERE'がない場合は、完全なテーブルスキャン/更新が行われますので、2,300万レコードを更新するだけです – Rodolfo

3

データベースサーバーの行数には、これは確かにそれほど速くないと言われています。あなたがインデックスを持っていたなら、それは助けにはなりませんでした。索引は、データベース・サーバーが特定のレコードをより迅速に見つけるのを支援するために使用されます。

+0

ありがとう、おそらくかなり普通の時間でした。 – divided

0

列を更新してnullに設定する代わりに、列を削除してnullableとして再追加できます。私の経験では、これは、各行を更新してそのフィールドにnullを設定するよりも何倍も高速です。