1.计算列(Computed Column)定义
计算列由可以使用同一表中的其他列的表达式计算得来。表达式可以是非计算列的列名、常量、函数,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。
2.性能测试
create table tab (ID intidentity(1,1), ST char(1), DESCR varchar(10))
alter table tab add CONSTRAINT pk_tabprimary key (ID)
-- 产生10万笔记录.
-- 无计算列时的查询.
selectID from tab where upper(DESCR)+ST='QC1332X*'
CPU time = 406 ms , elapsed time = 630 ms. Clustered IndexScan(OBJECT:([ cxcai ].[ dbo ].[tab].[ pk_tab ])
-- 新增计算列及索引.
altertable tab add DESCR2 as upper(DESCR)+ST
create index idx_tab_DESCR2 ontab(DESCR2)
-- 有计算列时的查询, 自动套用.
select ID from tab whereupper(DESCR)+ST='QC1332X*'
CPU time = 0 ms , elapsed time = 0 ms. Index Seek(OBJECT:([ cxcai ].[ dbo ].[tab].[idx_tab_DESCR2])
3. 代价
3.1 增加 DML 执行成本 .
3.2 占用磁盘空间 .
计算列由可以使用同一表中的其他列的表达式计算得来。表达式可以是非计算列的列名、常量、函数,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。
2.性能测试
create table tab (ID intidentity(1,1), ST char(1), DESCR varchar(10))
alter table tab add CONSTRAINT pk_tabprimary key (ID)
-- 产生10万笔记录.
-- 无计算列时的查询.
selectID from tab where upper(DESCR)+ST='QC1332X*'
CPU time = 406 ms , elapsed time = 630 ms. Clustered IndexScan(OBJECT:([ cxcai ].[ dbo ].[tab].[ pk_tab ])
-- 新增计算列及索引.
altertable tab add DESCR2 as upper(DESCR)+ST
create index idx_tab_DESCR2 ontab(DESCR2)
-- 有计算列时的查询, 自动套用.
select ID from tab whereupper(DESCR)+ST='QC1332X*'
CPU time = 0 ms , elapsed time = 0 ms. Index Seek(OBJECT:([ cxcai ].[ dbo ].[tab].[idx_tab_DESCR2])
3. 代价
3.1 增加 DML 执行成本 .
3.2 占用磁盘空间 .