当我将未实现的计算列添加到表中时,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
检查网页内容,您可能会看到新旧网页相同
答案 0 :(得分:0)
我认为这样做是因为没有物化的计算机列可能会在每次访问时产生不同的值。因此,为了确保数据完整性并且每个单元格都有应该存在的数据,它首先将其复制到一个位置,然后使用它来执行您要求它执行的功能。