Просмотр или пользовательская функция?
-
02-10-2019 - |
Вопрос
У меня есть сценарий, где я объединяю две таблицы в одну (использующую Union), а также присоединиться к данным из некоторых других таблиц.
Я могу сделать это либо с помощью функции представления UDF / пользователем.
Учитывая, что я не имею никакого взгляда на все в моей базе данных, но довольно несколько UDF для поиска FullText и тому подобное, я искушаю использовать UDF для этого сценария, чтобы сохранить его «чистым».
Однако это совершенно субъективно, и я задавался вопросом, есть ли лучшая объективная основа для того, чтобы пойти на вид или UDF в этом сценарии.
Я сравнил планы запроса для обоих, и они точно так же, так что я не верю, что есть штраф или преимущество производительности для использования либо одного.
Есть ли другая причина выбрать один над другим или не имеет значения?
Решение
Я всегда буду использовать функции в порядке сложности. Вид относительно простым с точки зрения профиля производительности и управления безопасностью. Я, вероятно, использовал его первым.
Я предполагаю, что вы говорите о линейном столовом UDF, который в значительной степени имеет идентичные характеристики производительности. Безопасность на UDF немного отличается, и вы не можете иметь вместо того, чтобы триггеры могли сделать «вставки» на вид. Преимущество UDF было бы то, что вы можете принудительно принудить параметры, которые обеспечивают тем самым, как и ожидалось, что моблоки использования используются, тогда как представление может быть запрошено без каких-либо критериев (возможно, случайно).
Если вы получили желание иметь UDF для параметризации, вы можете сломать его сверху вида (так что нет дублирования кода), и вы должны обнаружить, что производительность существенно не влияет, потому что оптимизатор может сочетать представления и встроенный TVF успешно.
Другие советы
Одно преимущество, которое я вижу, используя этот сценарий, поскольку просмотр - это индексировать их и использовать их как «индексированные представления», где в отличие от традиционного представления, существует физический файл, который создается и, следовательно, запрос, является быстрее, где в нем есть значительное количество строк. Очень эффект использования этого состоит в том, чтобы обойти объединения и профсоюзы для всех строк, вместо этого создают их только для новых строк.
Как предложил наш друг CADE, вы общаетесь, вы используете вид внутри UDF, чтобы держать его в чистоте, и это не совсем не отличается.
Надеюсь это поможет !