Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по работе с табличными функциями  [new]
Table_Function
Guest
Добрый день!
Подскажите как работают табличные функции в запросах.
Случай следующий: функция возвращает некие коэффициенты на дату.

В запросе эта функция джойнится с обычной таблицей, и значения из таблицы пересчитываются по коэффициентам.

Что будет лучше: выгрузить статичные данные из ф-ции во временную таблицу или использовать ф-цию напрямую в запросе?

Почему возник вопрос: сделал два запроса, результат оказался в пользу (значительно) прямого джоина с функцией. Т.е. по всему данные из ф-ции, если они статичны (как у меня: параметр в функции - константа) - кэшируются. Но опасаюсь, что при значительном росте базы ситуация ухудшится.

ПС: дайте сцылку почитать, про то, как сиквел работает с табличными ф-циями.

Спасибо.
4 фев 14, 12:13    [15515202]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по работе с табличными функциями  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
сцылко на почитать
4 фев 14, 12:16    [15515235]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по работе с табличными функциями  [new]
Glory
Member

Откуда:
Сообщений: 104751
Table_Function
Что будет лучше: выгрузить статичные данные из ф-ции во временную таблицу или использовать ф-цию напрямую в запросе?

Лучше то, что работает быстрее и с меньшими затратами.

Table_Function
Т.е. по всему данные из ф-ции, если они статичны (как у меня: параметр в функции - константа) - кэшируются.

Не кэшируются результаты. Могут кэшироваться исходные данные таблиц
4 фев 14, 12:19    [15515276]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по работе с табличными функциями  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Table_Function
Подскажите как работают табличные функции в запросах.
Бывают параметризованные представления и функциональные процедуры.
Что из этих двух вариантов вы имеете ввиду. Ибо "работают" они совершенно по разному.
4 фев 14, 13:18    [15515872]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по работе с табличными функциями  [new]
Table_Function
Guest
Mnior,

Если первое - это когда вункция сразу возвращает результат, т.е. в ней:
as
    returnt(
           select* from t
    )

, то мой - второй случай)))
4 фев 14, 15:20    [15517111]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по работе с табличными функциями  [new]
aleks2
Guest
Table_Function
, то мой - второй случай)))


returns @t table (aFileld1 type1, aFileld2 type2, ...)
as
...


Нужно понимать как простую табличную переменную.
declare @t table (aFileld1 type1, aFileld2 type2, ...)

Заполненную и используемую в запросе.

"Двойной" вызов функции означает ДВЕ переменные и повтор заполнения.
4 фев 14, 15:28    [15517176]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по работе с табличными функциями  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Table_Function
Если первое - это когда вункция сразу возвращает результат
В первом случае функция ничего не возращает, она вообще не "вызывается" - это обыкновенное представление - т.е. тупой голый текст, которые тупо подставляется в запрос.

Во втором случае, т.е. функциональная процедура. делается явно вызов, он исполняется и результат - реальная временная таблица. Притом эта таблица может иметь индексы, ограничения и т.п., как обычная таблица.
4 фев 14, 16:29    [15517740]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить