我在sql数据库(Azure)中有一个名为Alerta的表,该表具有三列,两个浮点类型(float)和一个datetime类型列,问题是数据库的填充速度非常快,我已经搜索了一个解决方案,我发现这可能是此post
中表格的大小我执行了以下代码,我发现Alerta表的每行字节为27411字节
这是我执行以确定字节/行的代码:
select
o.name,
max(s.row_count) AS 'Rows',
sum(s.reserved_page_count) * 8.0 / (1024 * 1024) as 'GB',
(8 * 1024 * sum(s.reserved_page_count)) / (max(s.row_count)) as 'Bytes/Row'
from sys.dm_db_partition_stats s, sys.objects o
where o.object_id = s.object_id
group by o.name
having max(s.row_count) > 0
order by GB desc
这是桌子的设计;该表没有索引,甚至没有主键
我还执行了该post的查询,以确定每个索引的大小,这就是results。
我很困惑,因为表只有三列,但是我没有找到减小表的行大小的解决方案
答案 0 :(得分:0)
SQL Server(Azure)中允许的最大行大小为8060字节,但是执行代码后得到的结果是Alerta表的每行字节为27411字节。
我认为您可以尝试以下script来获取每行大小的agian:
declare @table nvarchar(128)
declare @idcol nvarchar(128)
declare @sql nvarchar(max)
--initialize those two values
set @table = 'YourTable'
set @idcol = 'some id to recognize the row'
set @sql = 'select ' + @idcol +' , (0'
select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
from sys.columns
where object_id = object_id(@table)
and is_computed = 0
set @sql = @sql + ') as rowsize from ' + @table + ' order by rowsize desc'
PRINT @sql
exec (@sql)
将结果与您的结果进行比较。例如,我创建了一个表并通过SSMS运行脚本:
select * , (0 + isnull(datalength(price), 1) + isnull(datalength(money), 1) + isnull(datalength(date), 1)) as rowsize from test order by rowsize desc
希望这可以为您提供帮助。