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

时间:2016-04-28 22:57:36

标签: sql-server

我对此有一个类似的问题(Does the number of columns affect query performance?)。但是,我想得到一个更详细的解释。我怀疑并确认减少列数会改善性能。

所以,我运行了以下测试

设置

这两个表都有1900万行和c1上的NC索引

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

查询

    SELECT TOP 2 Million  
        c1,  
        c2  
    FROM Table
  • 结果
    当我针对两个表运行相同的查询时,表B明显更快。逻辑读取减少了53%。两者都没有物理读物。

问题

我最好的猜测(基于我的研究)是较少的列导致每页存储更多行。这将导致从缓存中读取更少的页面。

这是正确的,还是我还缺少其他东西?

1 个答案:

答案 0 :(得分:0)

你是对的,建议在sql查询中只使用require列。就表A中的46列而言,你应该修改它。

一页大小为8k。

我认为创建或阅读的数据页数取决于以下内容:

i)表格中的列数

ii)一列的列大小:像列一样持有xml,或nvarchar或varchar(max)

如果列数或列数非常大,那么数据页可能只包含行,或者更糟的一行可能存在于多个数据页中。

iii)从查询返回的行数:

iv)表中使用的索引。

请批评。