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

Откуда:
Сообщений: 633
Доброго всем дня!

Помогите разобраться, не могу понять почему появляются тормоза.
Если я использую запрос такого плана
select * from T78 a
left join
T11 b
on
b.[id_subsbj] = a.[id_subsbj]
выполняется в лёт,
если я отдельно вызываю функцию которая формирует таблицу dbo.fn_ListView()
срабатывает быстро,
но если я делаю такой запрос то он работает три секунды

select * from dbo.fn_ListView() a
left join
T11 b
on
b.[id_subsbj] = a.[id_subsbj]
помогите пожалуста разобраться в логике вещей, может где - то ошибаюсь?
мне кажется проблемы из-за того что в таблице dbo.fn_ListView() нет кластерного или некластерного индекса
а как в функции dbo.fn_ListView() его созать не знаю
22 дек 11, 20:08    [11811702]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
saley,

есть table-valued inline function
и есть table-valued multi-statement function

У Вас какая? От этого зависит ответ.

P.S. Стремитесь делать функцию inline
22 дек 11, 20:37    [11811768]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 633
Наверное inline
вот тело функции
function dbo.fn_TableControlKVSVDrill
(
@NGDU varchar (10)
)
RETURNS

@TTemp TABLE
(
[ngdu] varchar(70)
)
as begin
.......
return
end
22 дек 11, 20:50    [11811799]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 633
извиняюсь,
FUNCTION dbo.fn_ListView()
RETURNS

@TTemp TABLE
(
[ngdu] varchar(70)
)
as begin
.......
return
end
22 дек 11, 21:08    [11811818]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
saley,

нет, это не inline.
Можете всё тело функции представить в виде одного SELECTа?
22 дек 11, 21:47    [11811922]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
saley
Наверное inline
вот тело функции
function dbo.fn_TableControlKVSVDrill
(
@NGDU varchar (10)
)
RETURNS

@TTemp TABLE
(
[ngdu] varchar(70)
)
as begin
.......
return
end

это multi-statement function
22 дек 11, 21:49    [11811930]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
iap
P.S. Стремитесь делать функцию inline
а чем лучше? быстрее пашет?
22 дек 11, 21:57    [11811956]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
ZVER-10
iap
P.S. Стремитесь делать функцию inline
а чем лучше? быстрее пашет?
И намного!
22 дек 11, 22:00    [11811964]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
iap, спс. буду знать
22 дек 11, 22:18    [11811999]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 633
Переделал функию как inline, и всё зашуршало, спасибо.
23 дек 11, 07:34    [11812595]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
saley
Переделал функию как inline, и всё зашуршало, спасибо.
Если бы не удалось переделать (бывают такие сложные алгоритмы, что никак),
то можно было сделать индекс так:
function dbo.fn_TableControlKVSVDrill 
( 
@NGDU varchar (10)
)
RETURNS 

@TTemp TABLE 
(
 id int not null,
 [ngdu] varchar(70),
 constraint u_ngdu_id unique(ngdu,id)
)
as begin
.......
return 
end 
23 дек 11, 09:34    [11812838]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 633
Ещё раз большое спасибо за помощь, у меня много таблиц которые можно сделать только создавая функции. И конечно же время обработки увеличивается в разы если нет индекса, уже начал оптимизировать свой код
23 дек 11, 10:46    [11813150]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
saley
у меня много таблиц которые можно сделать только создавая функции.
Непонятно
23 дек 11, 12:24    [11814096]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 633
Попробывал вставить
по примеру (естественно подставляя свои имена полей)
constraint u_ngdu_id unique (ngdu,idd)

выдаёт ошибку

Incorrect syntax near the keyword 'CONSTRAINT'.

вставил ваш пример та же ошибка
create function dbo.fn_TableControlKVSVDrill
(
@NGDU varchar (10)
)
RETURNS
@TTemp TABLE
(
[idd] i nt not null,
[ngdu] varchar(70),
constraint u_ngdu_idd unique(ngdu,idd)
)
as begin
set @NGDU = ''
return
end

А как прально будет?
23 дек 11, 12:31    [11814174]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
iap
saley
у меня много таблиц которые можно сделать только создавая функции.
Непонятно

Думаю он говорит о результатах функций как о таблицах.
Select * From some_function()
очень похоже на
Select * From some_table
23 дек 11, 12:37    [11814231]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
saley
Попробывал вставить
по примеру (естественно подставляя свои имена полей)
constraint u_ngdu_id unique (ngdu,idd)

выдаёт ошибку

Incorrect syntax near the keyword 'CONSTRAINT'.

вставил ваш пример та же ошибка
create function dbo.fn_TableControlKVSVDrill
(
@NGDU varchar (10)
)
RETURNS
@TTemp TABLE
(
[idd] i nt not null,
[ngdu] varchar(70),
constraint u_ngdu_idd unique(ngdu,idd)
)
as begin
set @NGDU = ''
return
end

А как прально будет?
Имя убрать надо
create function dbo.fn_TableControlKVSVDrill 
( 
@NGDU varchar (10)
)
RETURNS 
    @TTemp TABLE 
(
 [idd] int not null,
 [ngdu] varchar(70),
 unique(ngdu,idd)
)
as begin
set @NGDU = ''
return 
end 
Ошибся, извините. @TTemp - штука локальная, а я хотел прицепить к ней постоянный объект.
23 дек 11, 12:43    [11814290]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить