存储在记录中的数据大小是否会影响聚簇索引的性能?

时间:2014-03-06 06:32:04

标签: sql sql-server

我有三张桌子。

  1. 主要事实表(FactTable)
  2. 包含int字段+其他'n'varchar(50)字段的表(Table001)
  3. 包含int字段+其他'n'varchar(max)字段的表(Table002)
  4. 每张表中的记录:#500万行

    查询:

    select * from FactTable f with (nolock)
    inner join Table001 t001 with (nolock) on f.id = t001.id
    inner join Table002 t002 with (nolock) on t002.id = f.id
    where f.datefield = '2014-02-01'
    

    所有表都在字段'Id'上有一个聚簇索引(用于连接表,即像外键一样)

    聚集索引不会在所有表上分段(碎片百分比<5%)

    案例是当我加入所有三个表时,我在执行计划中看到加入table002的成本高于table001。这种行为有什么理由吗?

    链接到XML执行计划:https://onedrive.live.com/redir?resid=7E436AE9D73999B0%21120

    由于尺寸限制,我无法粘贴xml内容。

    另一个链接:http://www.expinos.in/ExecutionPlan.sqlplan

1 个答案:

答案 0 :(得分:1)

一行中不在索引中的列的大小不会影响包含索引本身的性能。

然而,

大型非索引列将影响基于表的操作的性能。您将在页面上获得更少的行,因此在扫描时,您将需要阅读更多页面。

查询中包含的大型非索引列将对查询性能产生明显的直接影响。你必须从磁盘/内存中读取更大的值,尽管优化器会尝试这么做。

索引中列的大小会影响索引的性能。

聚集索引中列的大小将影响表中所有indecies的性能


比较1个字节还是10000个更容易?哈希1字节或10000更容易?从磁盘/内存读取1个字节还是10000个更容易?