列的数量如何影响SQL查询的逻辑读取次数?

5 浏览
0 Comments

列的数量如何影响SQL查询的逻辑读取次数?

我对这个问题(Does the number of columns affect query performance?)有一个类似的问题。然而,我想要得到一个更详细的解释。我怀疑并确认,拥有较少的列会提高性能。

因此,我进行了以下测试

设置

两个表都有1900万行,并且在c1上有一个非聚集索引。

  • 表A - 46列
  • 表B - 15列

查询

    SELECT TOP 2 Million  
        c1,  
        c2  
    FROM Table

  • 结果

    当我对这两个表运行相同的查询时,表B的速度明显更快。逻辑读取减少了53%。在任何一张表上都没有物理读取。

问题

根据我的研究,我最好的猜测是较少的列会导致每页存储更多的行。这将导致从缓存中读取的页面更少。

这个猜测正确吗,还是我漏掉了其他什么东西?

0
0 Comments

根据上述内容,我们可以得出如下结论:

在SQL查询中,列的数量会影响逻辑读取的数量。如果表中的列数量过多,就需要对查询进行修改。

每个页面的大小为8k。

数据页面的创建或读取数量取决于以下几个因素:

i)表中的列数。

ii)每个列的大小:例如,列中存储的是什么样的xml、nvarchar或者varchar(max)。

如果列数或者列的大小非常大,那么数据页面可能只能容纳一行,或者更糟糕的是,一行可能分布在多个数据页面上。

iii)查询返回的行数。

iv)在表中使用的索引。

请注意,以上观点可能存在争议,欢迎批评指正。

感谢提供这些其他关键因素,这些是我没有考虑到但与问题相关的因素。

0