Недавно мы столкнулись с странные проблемы производительности с SQL Server 2008Weird производительность запросов с использованием 'Макс'
Учитывая эти два запроса (которые эквивалентны)
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.
To cle ар подзапрос
(select tbfl_pk from tablefield where tbfl_name = 'Field with pk 48')
имеет в качестве результата 48.
Мы видим в плане запроса, что она превращает второй запрос в соединение, но это еще не объясняет мне, почему эта разница в производительности происходит. На мой взгляд, если будет разница, чем первая, она должна быть быстрее.
У нас есть индекс во всех соответствующих полях.
Являются ли эти тайминги согласованными? Или, вы только запустили первый, обратите внимание, что это заняло много времени, а затем запустить второй? –
Они согласованы, первый запрос начинает работать немного быстрее через некоторое время (доходит до 6 секунд), но все еще намного медленнее, чем второй. –