- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
--==================================================
-- используется для расчетного поля PPLS2BILLS_SRCO
--==================================================
CREATE FUNCTION RasSU
( @Ves decimal(10,2),
@Long decimal(10,2) )
RETURNS decimal(10,2)
AS
BEGIN
DECLARE @SU decimal(10,2), @d decimal(10,2), @W decimal(10,2)
SET @d=@Long / 100
SET @W=ROUND((@Ves / 1000),2)
IF @d * SQRT(@W / 50) < 0
BEGIN
SET @SU = 0
END
ELSE
SET @SU=@d * SQRT(@W / 50)
RETURN @SU
END
inkanus-gray 20.01.2014 14:51 # +1
Lure Of Chaos 21.01.2014 02:15 # +1
Lokich 21.01.2014 12:30 # +1
https://www.simple-talk.com/sql/t-sql-programming/clr-performance-testing/
или наглядно посмотреть на этот скриншот https://www.simple-talk.com/iwritefor/articlefiles/1329-Results-SE-ConversionPercent3.jpg
конечно это добавит определенный фарш в код, и скажется на дальнейшей поддержке, но производительности это определенно добавит.
и да, мне досталась процедура, которая использовала скалярную функцию, которая делала ltrim(rtrim(lower(replace(replace(value, char(9),''),char(13),''))), после того, как я избавился от функции и написал этот код в процедуру, у меня запрос вместо 20-25 секунд работал 2-3.
eth0 22.01.2014 17:36 # +1
А что тут вызывается из UDF?
bormand 22.01.2014 18:32 # +1
> которая использовала скалярную функцию, которая делала ltrim(rtrim(lower(replace(replace(value, char(9),''),char(13),'')))
Посмотрел таблички... Грустно стало... Ну неужели хреновина, которая стоит столько бабок, не может сделать простейшие оптимизации в духе инлайна? Какого хрена это должен делать программист? Код в хранимках и без того не айс, так еще и этот рукопашный инлайн для полного счастья...
Или во всех СУБД такая ерунда с тормозами при использовании UDF?
bormand 22.01.2014 19:20 # +1
P.S. Сорри за длиннопост. Рукопашный инлайн дал на 40% меньшее время исполнения. Имхо, 40% не такая уж заоблачная цифра, чтобы ради нее превращать все функции в помойку... Разве что редкие, особо горячие.
bormand 22.01.2014 18:41 # +1
kegdan 22.01.2014 19:12 # +1
bormand 22.01.2014 19:22 # +1
Потому что он тоже был вылизан до блеска наносекунд, вместо высокоуровневой оптимизации, угу.
anonimb84a2f6fd141 22.01.2014 19:41 # +2
kegdan 22.01.2014 19:47 # +2