В каждой таблице Postgres есть системное поле ctid, указывающее положение строки в блоке данных. Разбивка на страницы при его использовании будет происходить с меньшей нагрузкой на БД при больших смещениях offset.
CTIdDataProvider реализует такой доступ. Однако, следует учитывать некоторые осоебнности его использования:
- в запросах будет проигнорирован ORDER BY
- невозможно узнать общее количество строк, метод CTIdDataProvider::getTotalCount() вернет null
- количество записей на страницу не фиксировано, а может различаться от страницы к странице
Такой DataProvider будет полезен, если необходимо пройти по всей таблице с большим количеством строк.