Я пожалуй добавлю еще одну технику из этой же оперы. Допустим нам надо сделать обновление большого числа записей по хитрому алкогоритму. Поскольку хитрый алкогоритм в виде update_recordset не переписать, я иногда, когда нужна максимальная производительность любой ценой, делаю так:
1. Создаю таблицу с полями updateId (GUID), Key (может быть refRecId или salesId или что-то подобное), и полями newVal1,newVal2,newVal3 и тп
2. Далее, в цикле, вместо обновления записей основной таблицы, через RecordInsertList вставляю новые записи, засовывая в ее поля ключи основной таблицы и значимые поля с новыми значениями.
3. Затем, после recordInsertList.insertDatabase() пишу
X++:
update_recordset mainTable
setting field1=tempTable.NewValue1,field2=tempTable.NewValue2
join tmpValuesTable
where tmpValuesTable.updateId==myGuid
&& tmpValuesTable.key=mainTable.key
Разумеется в силе остаются соображения насчет параллелизма, предотвращения конфликтов обновления, блокировок и тп. Тем не менее, в простых случаях выигрыш перед while select.. table.update() может быть раза в 4...