2012-04-23 77 views
0

當我從數據庫中抓取數據時,有一個結果集大約在1k的範圍內。Doctrine 1.2 Pager - 它是否減少了從數據庫請求的數據量

如果我使用Doctrine(v1.2)_Pager限於每頁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; 

回答

2

主義的尋呼機將只要求25分的記錄。

您可能會將其與Zend_Paginator_Array之類的東西混淆,它會採用完整陣列並根據配置對其進行修剪。

1

我建議你enable mysql query log,並尾部生成的日誌文件。有了它,您可以看到針對每個請求發出的確切查詢。正如Mike B所說,Doctrine_Pager將發出一個分頁查詢,這將導致限制,偏移量組合,但是您可能會看到其他查詢,而您通過拖曳查詢日誌文件而沒有想到。

例如,在拖曳日誌文件的同時,我驚訝地發現原理unlink方法被重複。我還沒有弄清楚是Doctrine還是Symfony發出重複的刪除查詢,所以我只寫了自己的unlink,這可以提高數據庫/應用程序的性能。