当列仅用于(散列)加入时,索引是否有任何好处?
问题描述:
可以说一列只会用于加入。 (即,我不会在列上排序,也不会在列中单独搜索特定值)......我将使用列的唯一方法是加入到另一个表中。当列仅用于(散列)加入时,索引是否有任何好处?
如果数据库支持哈希联接(根据我的理解,它不会受益于索引)..那么索引的添加是不是完全多余的? (和浪费)?
答
在SQL Server中,它仍然会阻止Key Lookup
。
如果您在无索引字段中使用JOIN
,则服务器需要从聚集索引中获取该字段的值。
如果你在一个NC索引上的JOIN
,这些值可以直接获得而不需要从集群中加载所有的数据页面(这实际上是整个表格)。
因此,基本上你可以节省大量的IO,因为第一步基于非常窄的索引而不是从磁盘加载的整个表上过滤掉。
你怎么知道数据库将(总是)使用散列连接来连接这个表? – tbone 2011-12-16 17:25:59
给出正确的统计数据......我假设基于成本的优化器足够聪明,可以通过更昂贵的嵌套循环(无索引)选择散列连接。 – vicsz 2011-12-16 17:28:10