今天看网上有个问题:SQL Server计算列是否占用空间?其实这个问题查一下MSDN或者BOL就可以知道结果了 。在创建计算列的时候有一个参数可以指定PERSISTED。使用这个参数可以指定数据库引擎将在表中物理存储计算值,并在计算列依赖的任何其他列发生更新时对这些计算值进行更新。而且将计算列标记为 PERSISTED,便可对具有确定性、但不精确的计算列创建索引,提高性能。 如果不使用PERSISTED参数,那么计算列不会占用磁盘空间,但是查询计算列的时候要计算出值,这样性能会受影响(空间换性能)。 这里我们测试一下: USE tempdbGO-- CreateTableCREATE TABLE UDFEffect(IDINT,FirstName VARCHAR(100),LastName VARCHAR(100))GO-- Insert OneHundred Thousand RecordsINSERT INTO UDFEffect(ID,FirstName,LastName)SELECT TOP 100000ROW_NUMBER() OVER (ORDERBY a.name) RowID,"Bob",CASE WHENROW_NUMBER() OVER (ORDERBY a.name)%2= 1 THEN "Smith"ELSE "Brown"ENDFROM sys.all_objects aCROSS JOINsys.all_objects bGO-- Check thespace used by tablesp_spaceused "UDFEffect"GO -- AddComputed ColumnALTER TABLE dbo.UDFEffectADDFullName AS (FirstName+" "+LastName)GO-- Check thespace used by tablesp_spaceused "UDFEffect"GO
可以看到表大小并没有改变,数据页没有增长。-- AddComputed Column PERSISTEDALTER TABLE dbo.UDFEffectADDFullName_P AS (FirstName+" "+LastName)PERSISTEDGO-- Check thespace used by tablesp_spaceused "UDFEffect"GO
使用PERSISTED参数可以看到数据有增长。-- Clean upDatabaseDROP TABLE UDFEffectGOMySQL服务器Linux IO调度器算法的选择SQL Server虚拟日志文件数量的合理设定相关资讯 SQL Server SQL Server计算列
- Build2016喜讯:Linux用户注册微软 (03月17日)
- SQL Server on Linux 理由浅析 (03月09日)
- 管理SQL Server服务的登录(启动) (02月13日)
| - 微软要抢甲骨文用户?从Oracle迁移 (03月13日)
- 微软发布面向Linux的SQL Server预 (03月08日)
- SQL Server如何修改自增列值以及相 (01月23日)
|
本文评论 查看全部评论 (0)