Просмотр или пользовательская функция? - PullRequest
2 голосов
/ 03 июля 2010

У меня есть сценарий, в котором я объединяю две таблицы в одну (используя UNION), а также объединяю данные из некоторых других таблиц.

Я могу сделать это либо с помощью VIEW, либо с помощью UDF / пользовательской функции.

Учитывая, что у меня пока нет представления в моей базе данных, но довольно много UDF для полнотекстового поиска и тому подобного, я испытываю желание использовать UDF для этого сценария, чтобы сохранить его "чистым".

Однако, это совершенно субъективно, и я подумал, есть ли лучшая объективная причина для того, чтобы в этом сценарии использовать VIEW или UDF.

Я сравнил планы запросов для обоих, и они абсолютно одинаковы, поэтому я не верю, что при использовании любого из них наблюдается снижение производительности или преимущество.

Есть ли другая причина, чтобы выбрать одно из другого или это не имеет значения?

Ответы [ 2 ]

5 голосов
/ 03 июля 2010

Я бы всегда использовал функции в порядке сложности.Представление относительно простое с точки зрения профиля производительности и управления безопасностью.Вероятно, я бы сначала использовал его.

Я предполагаю, что вы говорите о встроенном табличном UDF, который будет в значительной степени иметь идентичные характеристики производительности.Безопасность в UDF немного отличается, и вы не можете вместо триггеров иметь возможность делать «вставки» в представление.Преимущество UDF заключается в том, что вы можете принудительно указывать параметры, тем самым гарантируя, что шаблоны использования соответствуют ожидаемым, тогда как представление можно запрашивать без каких-либо критериев (возможно, случайно).

Если вы в конечном итоге захотеличтобы иметь UDF для параметризации, вы можете наложить его поверх представления (чтобы не было дублирования кода), и вы должны обнаружить, что на производительность это существенно не влияет, поскольку оптимизатор может довольно успешно комбинировать представления и встроенный TVF.

2 голосов
/ 03 июля 2010

Одно преимущество, которое я вижу при использовании этого сценария в качестве представления, состоит в том, чтобы индексировать их и использовать их в качестве «индексированных представлений», где, в отличие от традиционного представления, существует физический файл, который создается, и поэтому запросы выполняются быстрее, когда в значительном количестве строкЭто.Сам эффект использования этого состоит в том, чтобы обходить объединения и объединения для всех строк, а не только строить их для новых строк.

Как предложил наш друг Cade, вы можете использовать представление внутри UDF, чтобы поддерживать его в чистоте иэто не сильно отличается.

Надеюсь, это поможет!

...