我已经阅读了 SQL Server 2008 的“OPTIMIZE FOR UNKNOWN”查询计划选项背后的理论和观点。我明白它做得很好。
我做了一些有限的实验,发现使用暖缓存,它只对 > 100k 行有用。然而,这是在一个简单的表和查询上,没有连接、过滤等。在冷缓存上,情况无疑会更有利。
我目前没有生产系统来调整之前/之后。所以我很好奇是否有人在测试之前/之后做过任何有用的发现,以确定何时使用此选项以及何时不使用。
更新:
我创建了一个包含 3 个列、UID 上的 PK 和 Col2 (int) 上的索引的表。所有处理都针对 Col2。指示的是行数和时间 (DATEDIFF * 1000000):
Type 1,000 5,000 20,000 100,000
Normal 0.3086 6.327 26.427 144.83, 141.126
Recompile 117.59 584.837
For Unknown 0.8101 6.52 26.89 143.788, 143.248