web-dev-qa-db-ja.com

大きなテーブルでVARCHAR列のサイズを大きくすると、問題が発生する可能性がありますか?

SQL Server 2008を使用していますが、約50万行のテーブルでVARCHARフィールドを(200から1200)大きくする必要があります。私が知る必要があるのは、考慮していない問題があるかどうかです。

このTSQLステートメントを使用します。

ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)

私はすでにデータのコピーでそれを試しましたが、このステートメントは私が見ることのできる悪影響はありませんでした。

だから、これを行うことで、私が考慮していなかった可能性のある問題はありますか?

ちなみに、列はインデックス付けされていません。

83
Paul T Davies

これはメタデータの変更のみです。迅速です。

観察:SET ANSI_xx設定の1つが異なる場合に「事故」を避けるために、明示的にNULLまたはNOT NULLを指定します。たとえば、何らかの理由でSSMSではなくosqlで実行します

57
gbn

私はこの質問をグーグルで検索したので、2セントを追加したかったのですが、私は同じような状況にありました...

BE AWAREvarchar(xxx)からvarchar(yyy)への変更中は実際にメタデータの変更ですが、varchar(max)への変更はそうではありません。 varchar(max)の値(別名BLOB値-イメージ/テキストなど)は、テーブルの行ではなく、「行外」のディスクに異なる方法で格納されるためです。そのため、サーバーは大きなテーブルで動作しなくなり、数分(数時間)応答しなくなります。

--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)

--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)

PS。 nvarcharまたはコースにも同じことが当てはまります。

10
jazzcat

Varchar(200)からVarchar(1200)に変更しても、メタデータの変更に過ぎないため、問題は発生しません。SQLServer 2008では過度の空白が切り捨てられるため、パフォーマンスの違いも見られないので、要するに変化する。

4
Kprice84

列をvarchar(max)に変換しないようにする別の理由は、varchar(max)列にインデックスを作成できないためです。

0
psikorski