Мне всегда казалось, что для таких задач не modifieddatetime используется, а modifiedTransactionId. По нему проще индекс построить да и highmark тоже проще хранить.
Плюс я бы попробовал логику сбора изменений слегка изменить. Сначала я бы завел временную таблицу с CustAccount. Потом написал бы запрос по custTable->DirpartyTable->LogisticsPostalAddress (в общем - я точную последовательность не помню, но в общем развернул бы полную цепочку), в последнюю таблицу добавил бы условие modifiedTransactionId>highMark. Результаты сложил бы во временную табличку. Потом аналогичный запрос, но уже более простой custTable->DirpartyTable к последней табличке опять бы добавил условие ModifiedTransactionId>highMark.
В итоге - после того как каждый уровень запроса опрошен на предмет наличия изменений, сделал бы обычный джойн со всеми данными, но в этот джойн добавил бы exists join ко временной таблице. Ну и чтобы не тормозило - по всем табличкам добавил бы индекс modifiedTransactionId+joinField. Каждый отдельный запрос относительно простой и можно в случае чего индексов достроить. Ну и в итоге - запрос обычного набора данных для уже отобранных 10-15 годовых клиентских кодов вполне можно быстро прочитать.
|