0

マテリアライズされていない計算列をテーブルに追加すると、データページの実際のコンテンツに影響がない場合、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と、古いページと新しいページが同じであることがわかります。

  1. なぜASEはこの役に立たない操作をするのですか?
  2. それを回避することは可能ですか?
4

1 に答える 1

0

マテリアライズされていないコンピューターの列は、アクセスするたびに異なる値になる可能性があるため、そうすると思います。したがって、データの整合性を確保し、各セルに存在する必要があるデータがあることを確認するために、最初にデータを特定の場所にコピーし、それを使用して、要求された機能を実行します。

于 2012-09-13T07:07:42.383 に答える