Что за FastFirstRow ?

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
BorisT
Сообщения: 11
Зарегистрирован: 31 май 2005, 14:27
Откуда: DOKKO

Что за FastFirstRow ?

Сообщение BorisT »

В сообщениях вижу регулярно GetFirst FastFirstRow..., по смыслу вроде что-то интересное.
Попробовал - компилер незнает такой таблички :).
Что это за такое ?

Кста, привет от старых штиблет :)
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

FastFirstRow используется для ускорения запросов к БД. Если не используется этот префикс, то по умолчанию БД кэширует все данные относительно используемого индекса и ждет GetNext. Очень часто необходимо получить данные заведомо только из одной записи, не перебирая остальные.
Пример использования:

Код: Выделить всё

if GetFirst FastFirstRow SpSopr 
  where ((Word(1) == SpSopr.RrMC and
               cRec == SpSopr.cMCUsl)) = tsOK
{
  Message('Цена товара ' + SpSopr.Price);
}
Помимо этого, существуют ситуация когда необходимо проверить есть ли такая запись в БД или нет. Тогда используется RecordExists.
Пример:

Код: Выделить всё

if RecordExists SpSopr where ((KatSopr.nRec == SpSopr.cSopr)) <> tsOK
{
  Message('К сожалению, нет ни одной спецификации в выбранной накладной', Error);
}
Но используя RecordExists указатель записи не перемещается, а остается на текущей!
BorisT
Сообщения: 11
Зарегистрирован: 31 май 2005, 14:27
Откуда: DOKKO

Сообщение BorisT »

Проверил

Время формирования 00:03:56,07 - просто гетфирст
Время формирования 00:03:26,87 - GetFirst FastFirstRow
Время формирования 00:03:30,98 - снова GetFirst
Время формирования 00:03:14,61 - ещё раз FastFirstRow

Вывод - выигрыш есть, но кеши важней ;)
Отчет реально запускаемый с меньшими периодами конечно по 10 раз на дню, getfirst просто заменил во всём отчете (их там 56) на макроопределение. все сканы _loop where.

упд, чтоб соблюсть так сказать чистоту эксперемента поставил счетчик, в этом тесте на эти самые вызовы -
17:16:40,44 Getfirst-вызовов 161253
Ответить