Zend_Paginator - Увеличение запросов - PullRequest
1 голос
/ 07 апреля 2010

Я начал использовать Zend_Paginator, все работает нормально, но я заметил, что есть еще один запрос, который замедляет время загрузки. Дополнительный запрос:

SELECT COUNT(1) AS `zend_paginator_row_count` FROM `content`

Обычный запрос:

SELECT `content`.`id`, `content`.`name` FROM `content` LIMIT 2

PHP:

$adapter = new Zend_Paginator_Adapter_DbSelect($table->select()->from($table, array('id', 'name')));
$paginator = new Zend_Paginator($adapter);

Могу ли я объединить два запроса в один (для повышения производительности)?

Ответы [ 2 ]

1 голос
/ 07 апреля 2010

Убедитесь, что у вас есть индекс для одного или нескольких столбцов типа int в выбранной таблице.Таким образом, запрос подсчета не будет сильно влиять на производительность.Вы можете использовать setRowCount(), чтобы указать количество (если оно у вас есть).

С http://framework.zend.com/manual/en/zend.paginator.usage.html:

Примечание. Вместо выбора каждой соответствующей строкиПо данному запросу адаптеры DbSelect и DbTableSelect извлекают только наименьшее количество данных, необходимых для отображения текущей страницы.Из-за этого динамически генерируется второй запрос для определения общего количества совпадающих строк.Тем не менее, можно напрямую предоставить запрос подсчета или подсчета.См. Метод setRowCount () в адаптере DbSelect для получения дополнительной информации.

0 голосов
/ 07 апреля 2010

Объединение этих двух компонентов не приведет к значительному увеличению производительности, если таковое вообще произойдет. Фактическое содержимое выбора содержит оператор предела (так как вы пытаетесь получить подмножество всей таблицы в базе данных), где счетчик должен подсчитать все строки в базе данных. Причина, по которой это делается так, состоит в том, чтобы избежать необходимости выбирать очень большой набор данных просто для получения счетчика.

...