Захотел вот избавится от сторонних UDF и сразу нарвался на неприятность…
Select C.* FROM CUSTOMER C order by C.account_no
297 ms
RFUNC
Select C.* FROM CUSTOMER C order by PADLEFT(C.account_no,10,'0')
484 ms
ADHOCFREEUDF
Select C.* FROM CUSTOMER C order by F_Padleft(c.Account_No,'0',10)
Execute time = 3s 0ms
Родное для FIREBIRD LPAD
Select C.* FROM CUSTOMER C order by LPAD(C.Account_No,10,'0')
45s 672ms !!!!!!
Сервер FB v 2.1.1.1790
Всего в таблице CUSTOMER 8956 записей
Тормоза LPAD FB 2.1.1
Re: Тормоза LPAD FB 2.1.1
результатом LPAD является строка длиной 32К, что приводит к тормозам во время сортировки. Обойти можно кастом:
Код: Выделить всё
order by CAST(LPAD(C.Account_No,10,'0') as VARCHAR(10))
Re: Тормоза LPAD FB 2.1.1
Действительно CAST помог (482 мс)
на все функции которые возвращают строки нужно наклвдывать CAST?
на все функции которые возвращают строки нужно наклвдывать CAST?
Re: Тормоза LPAD FB 2.1.1
только для LPAD/RPAD, т.к. для них на этапе компиляции запроса неизвестно, какова будет длина результата