Помогите ускорить выполнение запроса:
insert into @Pt select * from
select * from @T where Param1=@Par_i as A,
select * from @T3 where F_func_Bool
(param1,param2,param3,@Par_i)=1 as B
where Profit_func_scalar
(param1,param2,param3,param4) > Fr_funk_scalar (@k1,@k2,@K3)
F_func_Bool - логическая функция, Profit_func_scalar и Fr_funk_scalar - скалярные функции, @T,@T3 - таблицы по 20 000 записей
запрос выполняется в циклах достаточно часто,
думаю что если вместо функций подставить конкретное выражение запрос должен выполняться быстрее например
вместо F_func_Bool (param1,param2,param3,@)=1 --> param1>@Par_i
вместо Profit_func_scalar (param1,param2,param3,param4) > Fr_funk_scalar (@k1,@k2,@K3) --> 1/param4 > @K1
но для этого запрос нужно вызывать из текстовой переменной, заменяя функции конкретным выражением
Жду ответа от всех кто знает как это сделать или может предложить другой метод ускорить выполнение запроса
Помогите ускорить выполнение запроса
Mihail, вообще-то стандартная процедура оптимизации запроса начинается с изучения плана этого запроса. Из него будет видно, где именно твой запрос просаживается. Из практики где-то в 90% случаев где-нибудь идёт сканирование таблицы, т.е. индекса не хватает.
Даже самый дурацкий замысел можно воплотить мастерски
Mihail, не знаю какой у вас сервер. Но скорее всего надо ставить индексы на Fr_funk_scalar (@k1,@k2,@K3) и другие. Потом изучение плана чтоб избежать сканирование таблицы.
-------------
Лень - двигатель прогресса!
Лень - двигатель прогресса!
Oscar, слово изучение я не буду раскрывать, ок?
А план запроса, он же query plan показывает какие таблицы и какие индексы участвуют в запросе. Подробнее - в мануале к серверу.
Пример запроса и его плана:
Это - плохой план. А вот так - хороший:
Разница - в использовании индекса.

Пример запроса и его плана:
Код: Выделить всё
Query: SELECT au_lname, au_fname
FROM Authors
WHERE city = "Oakland"
SHOWPLAN: STEP 1
The type of query is SELECT
FROM TABLE
authors
Nested iteration
Table Scan
Код: Выделить всё
SHOWPLAN: STEP 1
The type of query is SELECT
FROM TABLE
authors
Nested iteration
Using Clustered Index
Даже самый дурацкий замысел можно воплотить мастерски
Oscar, это злостный оффтопик. Пример привёл для MS SQL 6.5 -первый попавшийся под руку. Есть они во всех т.с. "промышленных" серваках. Т.е. в Sybase, MS SQL, Oracle, наверняка в DB2. Есс-но каждый выводит их как хочет, но смысл у всех общий. Мануалы (product manuals) на то и мануалы, чтобы вместе с продуктом поставляться
.
У Sybase - Sybooks, у MS по аналогии есть Books Online, которая почти целиком дублируется в MSDN, ну а сотальных сам ищи в Google.
P.S: а вообще это всё в разделе Perfomance & Tuning смотреть надо.

У Sybase - Sybooks, у MS по аналогии есть Books Online, которая почти целиком дублируется в MSDN, ну а сотальных сам ищи в Google.
P.S: а вообще это всё в разделе Perfomance & Tuning смотреть надо.
Даже самый дурацкий замысел можно воплотить мастерски