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 回答