我有三张桌子。
每张表中的记录:#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内容。
答案 0 :(得分:1)
一行中不在索引中的列的大小不会影响包含索引本身的性能。
然而,
大型非索引列将影响基于表的操作的性能。您将在页面上获得更少的行,因此在扫描时,您将需要阅读更多页面。
查询中包含的大型非索引列将对查询性能产生明显的直接影响。你必须从磁盘/内存中读取更大的值,尽管优化器会尝试这么做。
索引中列的大小会影响索引的性能。
聚集索引中列的大小将影响表中所有indecies的性能
比较1个字节还是10000个更容易?哈希1字节或10000更容易?从磁盘/内存读取1个字节还是10000个更容易?