0

データベースから取得したときに 1k マーク前後の結果セットがある場合、何かが頭をよぎりました。

Doctrine(v1.2)_Pager を使用する場合、1 ページあたり 25 に制限されます。データベースから引き出されるデータの量がわずか 25 に減りますか。それとも、まだセット全体を取得してから減らすのでしょうか?

そのように実装されています:

$perPage = 25;
$numPageLinks = 25;

$pager = new Doctrine_Pager($q, $input->page, $perPage);

$result = $pager->execute(array(), Doctrine::HYDRATE_ARRAY);

$pagerRange = new Doctrine_Pager_Range_Sliding(
    array('chunk' => $numPageLinks), $pager
);

$pagerUrlBase = '...';

$pagerLayout = new Doctrine_Pager_Layout(
    $pager, $pagerRange, $pagerUrlBase);

$pagerLayout->setTemplate('...');
$pagerLayout->setSelectedTemplate(
    '...'
);
$pagerLayout->setSeparatorTemplate('...');

$this->view->records = $result;
4

2 に答える 2

2

Doctrine のページャーは 25 レコードしか要求しません。

Zend_Paginator_Array完全な配列を取り、構成に応じてそれを削減するようなものと混同している可能性があります。

于 2012-04-23T17:08:15.827 に答える
1

mysql query log を有効にして、結果のログ ファイルを末尾にすることをお勧めします。これにより、各リクエストに対して発行された正確なクエリを確認できます。Mike B が述べたようDoctrine_Pagerに、制限、オフセットの組み合わせになるページネーション クエリを発行しますが、クエリ ログ ファイルを追跡することで、予期しない他のクエリが表示される場合があります。

たとえば、ログ ファイルを追跡しているときに、Doctrineunlinkメソッドが重複していることに驚きました。重複した削除クエリを発行したのが Doctrine なのか Symfony なのかはまだわからないので、データベース/アプリケーションのパフォーマンスを向上させる独自の unlink を書きました。

于 2012-04-23T17:18:14.107 に答える