powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обращение к юзерским функциям из запросов
4 сообщений из 4, страница 1 из 1
Обращение к юзерским функциям из запросов
    #32026597
Фотография Katy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция, которая возвращает список сотрудников отдела
теперь я хочу использовать её в запросе

select ... from ... where ...
fam in (select fam from dbo.OTDEL(@num) ) ... and ...

имеет ли смысл выносить содержимое in во временную таблицу
Собствеенно вопрос в том на сколько тяжеловесно использование временных таблиц.
Правда ли что если вынести функцию предварительно в таблицу то select из этой таблицы быдет кэширован,а при использованиии чисто функции нет.
Есть ли какие то минусы при использовании временных таблиц.
...
Рейтинг: 0 / 0
Обращение к юзерским функциям из запросов
    #32026636
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую

Мне кажется, что оптимально использовать (в порядке убывания скорости выполнения)
1. Inline-функцию
1. Постоянную таблицу-кэш (нужно будет чистить периодически)
2. Переменную типа TABLE (можно "поиграть" с PRIMARY KEY для этой переменной)
3. Временную таблицу

Удачи
...
Рейтинг: 0 / 0
Обращение к юзерским функциям из запросов
    #32026646
Фотография Katy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
но не понятно почему переменная типа table медленнее функции
ведь на сколько я понимаю функция вычисляеться для каждой записи таблицы из которой достаём данные
и чем временная таблица отличаеться от пременной типа table
вариант с постоянной таблицей не подходит потому что набор данных меняються очень часто
...
Рейтинг: 0 / 0
Обращение к юзерским функциям из запросов
    #32026715
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ведь на сколько я понимаю функция вычисляеться для каждой записи таблицы из которой достаём данные

Inline-функцию вообще-то должна возвращать набор и использоваться как набор, поэтому о каком вычислении для каждой записи вы говорите ? Scalar-функции - другое дело, но логично ли их сравнивать с переменными типа таблица или временными таблицами ?



и чем временная таблица отличаеться от пременной типа table

Временная таблица - это все таки таблица, т.е. в принципе нормальный объект
Переменная - это кусок оперативной памяти

Если говорить про функциональность, то самое важное IMHO это то, что все переменные в SQL - локальные, т.е. не видны, например, в вызываемых процедурах(и к тому же переменная типа таблица нельзя передавать как параметр), в отличии от временных таблиц



Правда ли что если вынести функцию предварительно в таблицу то select из этой таблицы быдет кэширован,а при использованиии чисто функции нет.

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

Или вы про процедурный кэш ?



ЗЫ
А вообще-то сравнение конкретных планов запросов с/без UDF/временными таблицами/переменными наверное поможет больше, т.к. все типы объектов имеют "право на жизнь" и могут в конкретном случае оказаться лучшим выбором.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обращение к юзерским функциям из запросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]