How very strange !!!
Just to confirm that the exact order of the steps were:
DBCC REINDEX (on the same index with a fill factor of 90)
go
DBCC updateusage ( DatabaseName, NotMyTable)
go
sp_spaceused NotMyTable
go
Some possibities:
You have an index with an extremely low fill factor - this should not be the case as the sp_spaceused is showing a low size for index usage of 2008 KB.
These are all bugs:
1. sp_spaceused has a bug, possibly with an overflow
2. DBCC updateusage has a bug and is not recording correct information in the sysindexes table
3. Space Management has a bug
4. The table master.dbo.spt_values has a bad value for number of bytes in a page.
Try running the below SQL which will show the columns used by sp_spaceused from the sysindexes table and post back. just replace "employee" with the real table name.
declare @pagesBytesinteger
, @PagesToKbinteger
select @pagesBytes = d.low
from master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
set @PagesToKb = @pagesBytes / 1024.0
select 'sb means should be'
select @pagesBytesas PageBytes_sb_8096
, @PagesToKb as KbPerPages_sb_8
select IndexName
, indid
, rows
, OrigFillFactor
, ReservedPages
, DataPages
, ReservedPages * @PagesToKbas ReservedKb
, DataPages* @PagesToKbas DataKb
, ( WorkPages - DataPages ) * @PagesToKb as IndexKb
from (
select i.name as IndexName
, i.indid
, i.rows
, i.OrigFillFactor
, i.reserved
, i.dpages
, i.used
, case when indId in (0, 1, 255) then reserved
else null
end
as ReservedPages
, case when indId < 2 then dpages
when indId = 255 then used
else null
END
as DataPages
, case when indId in (0, 1, 255) then used
else null
end
as WorkPages
from sysindexes i
where i.id = object_id ('employees')
) as X
exec sp_spaceused employees
go
SQL = Scarcely Qualifies as a Language