假设我需要从 luTab 更新 myTab 如下
update myTab
set LookupVale = (select LookupValue from luTab B
where B.idLookup = myTab.idLookup)
luTab 由 2 列组成(idLookup(unique)、LookupValue)
哪个更可取:idLookup 上的唯一聚集索引,还是 idLookup 和 Lookupvalue 上的唯一聚集索引?在这种情况下,覆盖指数会有所作为吗?
(我最感兴趣的是 SQL 服务器)
结语:
我在下面的 Krips 测试中跟进了 myTab 中的 2700 万行,luTab 中的 150 万行。关键部分似乎是索引的唯一性。如果索引指定为唯一,则更新使用哈希表。如果未将其指定为唯一,则更新首先通过 idLookup(流聚合)聚合 luTab,然后使用嵌套循环。这要慢得多。当我使用扩展索引时,SQL 现在不再假定 LookupValue 是唯一的,因此它强制使用慢得多的流聚合嵌套循环路由