【发布时间】:2019-01-02 22:36:19
【问题描述】:
我在一个 sql 数据库 (Azure) 中有一个名为 Alerta 的表,它有三列,两列浮动类型 (float) 和一个日期时间类型列,问题是数据库填得非常快,我搜索了一个解决方案,我发现这可能是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。
我很困惑,因为表格只有三列,我还没有找到减少表格行大小的解决方案
【问题讨论】:
-
向我们展示您的表结构。 Sql 查询可能会给您带来洞察力,但对我们没有影响
-
鉴于您的表格是两个浮点数和一个日期时间,这对我来说似乎很奇怪。但是,表上有多少索引?您可以使用相同的 DMV 获取每个索引的使用情况,因为 index_id 在那里表示。我也对您的数据突变在该表上的样子感兴趣。也就是数据是怎么插入的?它是如何更新的?其中任何一个(或两者)都可能对索引碎片产生影响(我也有兴趣了解该特定表的外观)。
-
@BenThul 数据是通过 Azure 的流分析作业插入的,数据每四秒插入一次,表没有任何索引。
-
“如何”的问题与所涉及的特定技术相比较少,而更多的是“关于任何相关索引如何插入数据?”。由于您已声明该表没有任何索引,因此您正在插入一个堆。插入后数据会更新吗?删除是如何发生的?至少,我强烈建议在您的表上放置一个聚集索引。堆对某些事情有好处,但是对它们的持续数据访问并不是很好。关于那张桌子的碎片有什么说法吗?
-
@BenThul 你好,我做了一个查询来检查索引碎片,堆的碎片不到 6%,但是我做到了你说,我创建了一个聚集索引,问题就解决了,但我不知道为什么......请你解释一下原因吗?
标签: sql-server azure azure-sql-database