Difference between sp_spaceused and DataLength SQL

2019-04-09 19:14发布

I have a table with single Row when i use SP_SpaceUsed N'<TableName>' it gives me data as 16 KB

and when I use dataLength something like this:-

select ClientID , 
(0 + isnull(datalength(ClientID), 1) + 
isnull(datalength(LeadID), 1) + 
isnull(datalength(Company_Name), 1) + 
isnull(datalength(Website), 1) + 
isnull(datalength(EmployeeCount), 1) + 
isnull(datalength(Revenue), 1) +
 isnull(datalength(Address), 1) + 
isnull(datalength(City), 1) + 
isnull(datalength(State), 1) + 
isnull(datalength(ZipCode), 1) + 
isnull(datalength(CountryID), 1) + 
isnull(datalength(Phone), 1) + 
isnull(datalength(Fax), 1) + 
isnull(datalength(TimeZone), 1) + 
isnull(datalength(SicNo), 1) + 
isnull(datalength(SicDesc), 1) +
 isnull(datalength(ResearchAnalysis), 1) + 
isnull(datalength(SourceID), 1) + 
isnull(datalength(BasketID), 1) + 
isnull(datalength(PipelineStatusID), 1) + 
isnull(datalength(SurveryID), 1) + 
isnull(datalength(NextCallDt), 1) + 
isnull(datalength(CurrentRecStatus), 1) +
 isnull(datalength(AssignedUserID), 1) + 
isnull(datalength(AssignedDate), 1) + 
isnull(datalength(TotValueAmt), 1) + 
isnull(datalength(Remove), 1) + 
isnull(datalength(Release), 1) + 
isnull(datalength(LegendID), 1) + 
isnull(datalength(Inserted_Date), 1) +
 isnull(datalength(Inserted_By), 1) + 
isnull(datalength(Updated_Date), 1) + 
isnull(datalength(Updated_By), 1)) 
as rowsize from TempLeadHeader order by rowsize desc

it gives rowsize 167 i guess this is in bytes

I would like to know why this difference is coming up in the result

Thanks in advance

2条回答
神经病院院长
2楼-- · 2019-04-09 19:26

sp_spaceused counts the space used by pages, which are 8k blocks. Remember that a table also includes things like indexes that take up space too. not to mention that data on pages are never full unless the fill factor is 100%

datalength will tell you how many bytes your column is

查看更多
萌系小妹纸
3楼-- · 2019-04-09 19:52

you compared 1 row against a table you would have to sum it for every row and even then it won't be the same because you are not showing header information and index data

you can also do something like this

dbcc showcontig ('TempLeadHeader') with tableresults

Then look at min, max and average recordsize columns

查看更多
登录 后发表回答