Shur писал(а): P.S. Думал, почему такая большая разница. Пришёл к выводу, что тесты не вполне сопоставимы. Если в случае с SQL была какая-никакая, а клиент-серверная среда с прокачкой по сети (22,82 Мб в одну сторону и 315,25 Мб в другую на 100М сети), то во втором случае было десктоп-приложением с чтением из локального файла.
Провёл тест на самом сервере. Напомню, код выполняется такой:
При выполнении на кода на самом сервере исключается фактор сети и прокачки по ней значительного объёма данных.Shur писал(а): Код следующий:Результат показывает, что 150603 записи были просканированы за 0:07:57, т.е. на одну запись пришлось по 0,00317 секунды.Код: Выделить всё
message('start',records(changes)) clock# = CLOCK() setcursor(CURSOR:Wait) clear(chng:record) set(changes) LOOP next(changes) if errorcode() break . . clock# = CLOCK() - clock# setcursor() message('finish: ' & format(clock#,@t4)&'|'&clock#/records(changes)&' 1/100 sec',records(changes))
Результат такой: 150603 записи были просканированы за 0:01:04, т.е. на одну запись пришлось по 0,000442 секунды, что в 9,2 раза медленнее TopSpeed драйвера. Кстати, этот результат оказался очень близким к результату выполнения сканирования при помощи динамического курсора средствами сиквела.
Shur писал(а): P.S. Запрос в самом SQL отработал за 0:01:08.Код: Выделить всё
declare @var int declare @i int = 0 declare cur1 cursor DYNAMIC for select id from dbo.db_changes open cur1 while (0=0) begin fetch next from cur1 into @var if (@@FETCH_STATUS = -1) begin break end set @i += 1 end close cur1 deallocate cur1 print @i