Как вы можете удалить или изменить запрос счетчика разбитых страниц на postgresql? - PullRequest
3 голосов
/ 04 июля 2011

Я использую cakephp с postgresql. Некоторые из моих таблиц очень большие. При использовании разбивки на страницы CakePHP он запускает COUNT() на большой таблице и затем запрашивает фактический результат. Запрос на подсчет занимает 2,5 минуты, тогда как фактический запрос, который возвращает данные, занимает 95 мс.

Можно ли устранить необходимость в подсчете или заменить его чем-то, что может идти быстрее? Мне не нужно возвращать точное количество строк, так же, как поиск Google возвращает результаты 1-10 из примерно 765 000.

РЕДАКТИРОВАТЬ: Альтернативно, есть ли способ я могу отключить счет вообще? Часто будет так много результатов, зная, сколько страниц не нужно. Все, что мне нужно, это кнопка «Далее», которая увеличивает SQL OFFSET, как уже было в пагинации cakephp, и если на следующей странице не возвращаются строки, это нормально.

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

Я нашел способ обойти запрос подсчета нумерации страниц в cakephp. В модели, которую вы хотите разбить на страницы, вы можете переопределить функцию, которая выполняет запрос подсчета, это функция paginateCount($conditions = null, $recursive = 0, $extra = array())

Я использовал следующий код, чтобы исправить мою проблему:

function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
    return 0;
}

Затем я отредактировал нумерацию страниц в представлении, чтобы всегда отображать следующую кнопку. Переход на страницу без результатов просто ничего не отобразит.

0 голосов
/ 29 марта 2014

Официальная документация дает вам возможность просто заставить торт получить фактические результаты: http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html#custom-query-pagination

Надеюсь, это поможет: -)

...