Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 сколько раз выполняется функция  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
Если функция используется и в Where и в Select она сколько раз выполняется?
Например
select id, MyFunction(id)
from tab
where MyFunction(id)>0

сильно ли это влияет на производительность? Или лучше делать например так
select * from (select id, MyFunction(id) as fn
               from tab)as T
where fn>0
20 янв 14, 17:08    [15442334]     Ответить | Цитировать Сообщить модератору
 Re: сколько раз выполняется функция  [new]
aleks2
Guest
Оптимизатор достаточно сообразителен, чтобы вычислить функцию ОДИН РАЗ на строку.

Ваще то, это профайлере видно.
20 янв 14, 17:16    [15442375]     Ответить | Цитировать Сообщить модератору
 Re: сколько раз выполняется функция  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
aleks2,
а в плане запроса возможно это увидеть?
20 янв 14, 17:19    [15442401]     Ответить | Цитировать Сообщить модератору
 Re: сколько раз выполняется функция  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
aleks2
Оптимизатор достаточно сообразителен, чтобы вычислить функцию ОДИН РАЗ на строку.

Ваще то, это профайлере видно.
А строк-то - миллиард!

И надо делать такую чудо-тормозную функцию детерминистической -
только тогда какая-то надежда на микроскопическое улучшение появится
20 янв 14, 17:21    [15442416]     Ответить | Цитировать Сообщить модератору
 Re: сколько раз выполняется функция  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
В общем, скалярные UDF - это абсолютное зло!
20 янв 14, 17:22    [15442427]     Ответить | Цитировать Сообщить модератору
 Re: сколько раз выполняется функция  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
PG81
Или лучше делать
Лучше вообще не писать процедурных функций, ни с табличным интерфейсом, ни со скалярным.

Если MyFunction(id) показывает свойство этого объекта ID. То положите это свойство в представление этого объекта.
И вместо получения данных их таблиц, выбирайте данные их этого представления, обобщающего многие его свойства.

CREATE VIEW [dbo].[vwTab] AS
SELECT	ID
,	...
,	<MyExpression>	AS MyPrpoperty
FROM	dbo.Tab
GO

SELECT	ID, MyProperty
FROM	dbo.vwTab
WHERE	MyProperty > 0
Хотя бы.
И потом вы увидите как надо оптимизировать. Во всяком случае вы к этому стали чуть ближе.
21 янв 14, 00:01    [15444254]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить