最近,我正在尝试优化这个查询
UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID
估计执行计划显示表更新占57%,哈希匹配(聚合)占40%。我进行了一些调查,发现了JOIN提示的主题。所以我在我的内部连接中添加了一个LOOP提示,新的执行计划显示表更新占38%,索引搜索占58%。
所以我准备开始将LOOP提示应用于我所有的查询,直到谨慎起见。经过一些搜索,我意识到JOIN提示在BOL中没有得到很好的涵盖。因此...
- 有人能告诉我为什么在所有查询中应用LOOP提示是个坏主意吗?我在某处读到LOOP JOIN是查询优化器的默认JOIN方法,但无法验证该说法的有效性?
- 什么时候使用JOIN提示?当出现问题而没有解决方案时?
- LOOP、HASH和MERGE提示之间有什么区别?BOL指出MERGE似乎是最慢的,但每个提示的应用是什么?
感谢大家的时间和帮助!
顺便提一下,我正在使用SQL Server 2008。上述统计数据是估算的执行计划。