MS SQL 高 IO/成本

MS SQL High IO/cost

提问人:Guba 提问时间:2/15/2023 最后编辑:jarlhGuba 更新时间:2/15/2023 访问量:64

问:

我有一张有超过 4000 万条记录的桌子,我发现从这张桌子上读取的速度非常慢。 该表本身大约有 70 列,其中大部分具有正常的数据类型,例如 nvarchar(20) int,bit 等。我只有少数几个 nvarchar(1000) 和 nvarchar(4000),就像其中的 3-5 个一样。

如果我执行选择 top1 行,我看到我的 IO 成本超过 2000 enter image description here 当我想从表中选择所有内容时,这需要一个多小时而没有任何转换。 这正常吗?有什么方法可以改进它吗?

如果我能降低我的 Io 成本,那么也许它可以提高我的性能。

SQL Server 性能 IO

评论

1赞 DavidG 2/15/2023
但是,为什么要在单个查询中选择所有 70 列和 4000 万行?这不是一个合理的查询。相反,请尝试找出实际查询运行缓慢的原因。尽管拥有如此多的大型 nvarchar 列总是会影响性能。
0赞 Martin Smith 2/16/2023
请注意,CPU + IO 组合的“运营商成本”仅为 。下划线的 IO 开销是对所有行进行整个扫描的成本。调整操作员成本的行目标效果,但不调整 I/O 成本和 CPU 成本 - 这些仍然显示预调整的成本。因此,SQL Server 并没有真正告诉您选择一行将花费 2816 个优化器 bean0.0032831TOP 1

答:

0赞 SQLpro 2/15/2023 #1

每个 nvarchar(4000) 最多可以使用 8 000 个字节。8kb是一页...因此,使用 nvarchar(4000) 的 5 列可能会读取 5 页......nvarchar(20) 的 70 列是 2 800 字节。结果是一行可以使用 6 页......

40m 行(未记录...这是一个 COBOL 术语)最多将使用 40 000 000 x 6 页,= 240 M 页......

想想你自己很高兴你的查询在IO方面只花了2816,只是一个肥胖的表。

你不认为你的表的设计尊重所有的归一化理论吗?