Я не сделал POC и не вижу необходимости делать это.Две конструкции создают по существу один и тот же план выполнения, с небольшими логическими различиями на самом низком уровне.Вы правы, что first_value()
может "замкнуть" выполнение путем извлечения первого встреченного значения для каждой строки, вместо того, чтобы "запоминать" минимум и сделать одно дополнительное сравнение (нужно сравнить только значение из текущей строки сминимум предыдущего ряда).
Насколько важно сравнение?Хорошо, подумайте о том, что влияет на производительность.Данные во всех ссылочных столбцах должны быть прочитаны.Столбцы из partition by
должны быть отсортированы или хэшированы.Столбцы из order by
должны быть отсортированы.После всей этой работы одно дополнительное сравнение на строку - ничтожная разница.
Я не хочу сказать, что это ничего - вы можете найти что-то, скажем, разницу в 1%.Однако эта дополнительная работа на самом деле ничто по сравнению со всем, что делает конструкция.