Скалярные функции перекомпилируются при каждом вызове. Это потому, что они не могут быть включены в кэш плана, созданный из sql, обработанного оптимизатором / процессором запросов.
В тех случаях, когда вы вызываете udf только один раз (как в Select dbo.UDFName(params)
), это действительно не имеет большого значения, но если вы используете скалярное значение udf в запросе, который проверяет миллион строк, udf будет скомпилирован миллион раз. Это определенно будет хитом производительности. Существует методика, при которой (если алгоритм может быть записан в структуре на основе множеств), вы можете преобразовать скалярные UDF-функции в так называемые строковые udf-выражения с табличными значениями, которые возвращают таблицы из одной строки / одного столбца ... включенные в sql запросы планируют кэши вместе с остальной частью sql, поэтому они не подвержены этому снижению производительности ...