让我们说一列只会用于加入。 (即我不会在列上进行排序,也不会单独在列中搜索特定值)...我将使用该列的唯一内容是加入另一个表。
如果数据库支持哈希联接(根据我的理解,不会从索引中获益)..那么添加索引是不是完全冗余? (并浪费)?
答案 0 :(得分:2)
在SQL Server中,它仍会阻止Key Lookup
。
如果您在未编入索引的字段上JOIN
,则服务器需要从聚集索引中获取该字段的值。
如果您在NC索引上JOIN
,则可以直接获取这些值,而无需从群集中加载所有数据页(实际上是整个表)。
所以基本上你可以节省很多IO,因为第一步是根据非常窄的索引而不是从磁盘加载的整个表来过滤掉。