2016-05-31 10 views
0

私は45M行(45GBのデータスペースと2GBのインデックススペース)のテーブルを持っています。私は新しい列を追加し、すぐに終了しました。列サイズを変更するのに時間がかかりますか?

alter table T add C char(25) 

次に、サイズが小さすぎるとわかりましたので、次のクエリを実行します。

alter table T alter column C varchar(2500) 

これは1時間実行され、まだ実行されています。 sp_whoisactiveショー(現時点ではまだ動作中)

reads: 48,000,000 
writes: 5,000,000 
physical reads: 3,900,000 

本当に速くはいけませんか?

+0

とあなたは答えは – DaveShaw

+1

[DBA.SE](http://dba.stackexchange.com)のより良い答えを得るかもしれないです:そうではありません。 –

+1

テーブルの最後に列を追加することは、ほとんど瞬時に行われます。既存の列のサイズを変更する場合は、テーブルと潜在的にインデックスを再構築する必要があります – JVC

答えて

1

私はケースをテストしました。

  1. は別の名前(それを呼び出すTBL2)TBL1から
  2. 挿入データTBL2
  3. ドロップにTBL2に
  4. アルター列と同じテーブル構造を作成します。あなたはステップの下に使用してより速くそれを行うことができますTBL1

にTBL1(旧テーブル)

  • 名前の変更TBL2(新しいものが)これはあなたに多くの優れたパフォーマンスを提供します。

    データを含むテーブルの列を変更すると、多くのデータ転送とデータページの整列が必要になるためです。 私のソリューションを使用すると、ページの再編成なしでデータを挿入するだけです。

    ポストは、あなたの質問に答える場合は、マークしてください答え

  • 関連する問題