マテリアライズされていない計算列をテーブルに追加すると、データページの実際のコンテンツに影響がない場合、ASEはテーブル全体をコピーすることにしました。
例:
create table t (i int null)
go
set showplan on
go
alter table t
add c compute (i+1) not materialized
go
QUERY PLAN FOR STATEMENT 1 (at line 1).
...
| |INSERT Operator (VA = 1)
...
| | |SCAN Operator (VA = 0)
| | | FROM TABLE
| | | t
| | | Table Scan.
...
| | TO TABLE
| | #syb__altab
...
ページの内容を確認するdbcc page
と、古いページと新しいページが同じであることがわかります。
- なぜASEはこの役に立たない操作をするのですか?
- それを回避することは可能ですか?