Цитата:А что с классом ПоставщикДанных, он тоже не умеет выборку как надо?
Объясню "на пальцах".
Для начала про поставщика данных для табличного поля.
Кратко работа его выглядит так:
1. Ты указываешь запрос
2. Ты указываешь ключ (совокупность полей)
Поставщик разбирает запрос (+ выполняет ряд преобразований). Но никакого "тайничка" как ты пишешь не делает. Просто напросто подготавливает данные для себя.
Далее ты устанавливаешь поставщика в ТП. И он по запросу от ТП читает первые n-строк, ну или последние, в зависимости от признака в ТП. Но в том и в другом случае происходит запрос к базе данных который практически идентичен оригинальному (твоему) только вот написан с указаниаем "top k" где k - это количество равное n отображаемых строк + немного сверху (чтобы было на всякий пожарный). А в конце запроса указвается порядок сортировки согласно уставленном ключу (asc или desc).
Для получения 2-й и далее "страницы" данных происходит выборка с указанием "top k", сортировкой согласно ключу, но при этом добавляется секция where (кроме той что ты сам в запросе написал), и в этой секции указывается условие на > по установленному ключу.
Как иллюстрация: вот запрос: "select row_id from sc13", ключ "id".
Так вот:
- первая страница "select top 20 row_id from sc13 order by id asc"
- вторая страница "select top 20 row_id from sc13 where id > ' 9 ' order by id asc"
- третья страница "select top 20 row_id from sc13 where id > ' 18 ' order by id asc"
и т.д.
Как видишь тут нет никакого "тайничка" и сканирования индекса и что ты там еще написал (открыл бы профайлер в SQL и все сам бы увидел). Просто идет ограниченная выборка, и оптимизация в том что читаются данные ровно те которые нужны для отображения, а не те которые есть. И естественно предполагается что ты не будешь указывать поля которые не покрыты тем или иным индексом, иначе тут не оптимизация, а какая то вредоностность уже будет.
А теперь в приложении к твоему запросу получается чтобы получить top 20 по упорядоченной выборке, SQL надо считать обе таблицы, и упорядочив их взять первые 20 штук. Где тут оптимизация то? Только в том что ты в результат ТП получается 20 штук, а не "120". Дык выгрузи в ТЗ ее в качестве поставщика для ТП поставь и будет счастье.
Что же касается класса "ПоставщикДанных" он является всего лишь надстройкой над реальными поставщиками данных для ТП и самостоятельно никакой другой логики не реализует. Его задача (класса) работа с метаданными, составление запросов, фильтрация, отборы, поиски, редактирование и пр. обработка действий пользователя и программы. А работает он либо на ODBC , либо на SQLite (dbf), либо на ИТЗ - поставщиках данных.
Ну и напоследок. "Как надо" в твоем случае это как раз то как не надо в принципе.