我们最近遇到了一个奇怪的 SQL Server 2008 性能问题
给定这两个查询(它们是等效的)
select max(tfiv_value) from tablefieldintvalue where tfiv_fk_tablefield = 48
和
select max(tfiv_value) from tablefieldintvalue where tfiv_fk_tablefield =
(select tbfl_pk from tablefield where tbfl_name = 'Field with pk 48')
第一个大约需要 20 秒,而第二个大约需要 0 秒。
要清除子查询
(select tbfl_pk from tablefield where tbfl_name = 'Field with pk 48')
结果是48。
我们在查询计划中看到它将第二个查询转换为连接,但这仍然不能向我解释为什么会发生这种性能差异。在我看来,如果有区别的话,应该比第一个更快。
我们对所有相关领域都有一个索引。