5

A私は、約 1,000 万レコードのテーブル(3 列) を運用しています。そのテーブルにもう1列追加したかったのですが、デフォルト値を1にしたいのですが、デフォルト値1などの列を追加すると、本番DBのパフォーマンスに影響がありますか。DBへのパフォーマンスへの影響を避けるために、これに対する最善のアプローチは何ですか? あなたの考えは大歓迎です!!

4

2 に答える 2

11

Oracle 11g では、デフォルト値を持つ新しい列を追加するプロセスが大幅に最適化されました。新しく追加された列が として指定されているNOT NULL場合、その列のデフォルト値はデータ ディクショナリに保持され、テーブル内のすべてのレコードに対して列のデフォルト値を格納する必要がなくなりました。したがって、各レコードを更新する必要がなくなりましたデフォルト値で記録します。このような最適化により、操作中にテーブルが排他的にロックされる時間が大幅に短縮されます。

 alter table <tab_name> add(<col_name> <data_type> default <def_val> not null)

さらに、そのように追加されたデフォルト値を持つ列は、意図的にその列を更新するか、その列に非デフォルト値を持つレコードを挿入するまで、スペースを消費しません。したがって、デフォルト値とnot null制約が指定された新しい列を追加する操作は、非常に迅速に完了します。

于 2013-10-07T22:03:53.420 に答える