У меня есть таблица с двумя вычисленными столбцами, каждая из которых имеет "Is Persisted", которая установлена в true. Однако при использовании их в запросе в плане выполнения отображается UDF, используемый для вычисления столбцов как части плана. Поскольку данные столбца вычисляются UDF, когда строка добавляется/обновляется, почему план должен включать ее?
Запрос невероятно медленный ( > 30 с), когда эти столбцы включены в запрос и молниеносно (< 1s), когда они исключены. Это приводит меня к выводу, что запрос фактически вычисляет значения столбцов во время выполнения, что не должно быть так, поскольку они настроены на сохранение.
Я что-то пропустил?
UPDATE: Здесь немного больше информации о наших рассуждениях для использования вычисленного столбца.
Мы являемся спортивной компанией и имеем клиента, который хранит имена игроков в одном столбце. Они требуют от нас, чтобы они могли искать данные игрока по имени и/или фамилии отдельно. К счастью, они используют согласованный формат для имен игроков - LastName, FirstName (NickName), поэтому их анализ довольно прост. Я создал UDF, который вызывает функцию CLR для анализа частей имени с использованием регулярного выражения. Таким образом, очевидно, что вызов UDF, который, в свою очередь, вызывает функцию CLR, очень дорог. Но поскольку он используется только в постоянном столбце, я решил, что он будет использоваться только несколько раз в день, чтобы мы импортировали данные в базу данных.