今天看網上有個問題:sql server計算列是否占用空間
其實這個問題查一下msdn或者bol就可以知道結果了 。在建立計算列的時候有乙個引數可以指定persisted。使用這個引數可以指定資料庫引擎將在表中物理儲存計算值,並在計算列依賴的任何其他列發生更新時對這些計算值進行更新。而且將計算列標記為 persisted,便可對具有確定性、但不精確的計算列建立索引,提高效能。
如果不使用persisted引數,那麼計算列不會占用磁碟空間,但是查詢計算列的時候要計算出值,這樣效能會受影響(空間換效能)。
這裡我們測試一下:
use tempdbgo
-- createtable
create
table udfeffect(id int,
firstname varchar
(100),
lastname varchar
(100))
go-- insert onehundred thousand records
insert
into udfeffect(id,firstname,lastname)
select
top 100000 row_number
()over
(order
by a.name) rowid,
'bob',
case
when
row_number
()over
(order
by a.name)%2 = 1 then
'smith'
else
'brown'
end
from
sys.
all_objects a
cross
join
sys.
all_objects bgo
-- check thespace used by table
sp_spaceused
'udfeffect'
go
-- addcomputed column
alter
table dbo.udfeffect add
fullname as
(firstname+
' '+lastname)
go-- check thespace used by table
sp_spaceused
'udfeffect'
go
可以看到表大小並沒有改變,資料頁沒有增長。
-- addcomputed column persisted
alter
table dbo.udfeffect add
fullname_p as
(firstname+
' '+lastname)
persisted
go-- check thespace used by table
sp_spaceused
'udfeffect'
go
使用persisted引數可以看到資料有增長。
-- clean updatabase
drop
table udfeffectgo
Sql Server中如何判斷表中某列是否存在
比如說要判斷表a中的字段c是否存在兩個方法 一,if exists select 1 from sysobjects t1 inner join syscolumns t2 on t1.id t2.id where t1.name a and t2.name c print 存在 else prin...
SQLServer佔記憶體過多的問題
經常看見有人問,mssql占用了太多的記憶體,而且還不斷的增長 或者說已經設定了使用記憶體,可是它沒有用到那麼多,這是怎麼一回事兒呢?首先,我們來看看mssql是怎樣使用記憶體的。最大的開銷一般是用於資料快取,如果記憶體足夠,它會把用過的資料和覺得你會用到的資料統統扔到記憶體中,直到記憶體不足的時候...
SQL Server 聚焦計算列持久化(二十一)
上一節我們結束了hash match aggregate和stream aggregate的講解,本系列我們來講講關於sql server中的計算列問題,簡短的內容,深入的理解,always to review the basics。在sql server 2005就引入了計算列,我們首先稍微看下在...