【发布时间】:2014-11-03 06:10:34
【问题描述】:
我正在使用 zend paginator 来获取记录并列出它们。
有 四个连接,我已经为所有相应的字段编制了索引,并且我只获得了在所有表中列出所需的字段。记录总数可能约为 500 万。我试图优化最大值,最后我发现下面的代码是最好的。
$select = new Zend_Paginator_Adapter_DbSelect($select);
$select->count($select);
$paginator = new Zend_Paginator($select);
但即便如此,加载页面也需要 40 秒。有人可以帮助我获得更好的性能。
我将很少更新我的问题。下面是我的代码
$query = $this->select();
$query->setIntegrityCheck(false);
$query->from(array('test1' => '*')))
->join(array('test2' => 'test2'), 'test2.id = test1.test2_id', array('*'))
->joinLeft(array('test3' => 'test3'), ("test1.test2_id = test3.test2_id'"), array('*')
->joinLeft(array('test4' => 'test4'), "test1.test4_id = test4.test4_id", array('*'))
->join(array('test5' => 'test5'), 'test1.test5_id = test5.id', array('*'));
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($query));
$paginator->setItemCountPerPage(ITEM_PER_PAGE);
$paginator->setCurrentPageNumber($this->getRequest()->getParam('page', 1));
$paginator->setPageRange(PAGE_RANGE);
$this->view->paginator = $paginator;
【问题讨论】:
-
执行计划会很好(在查询前使用 EXPLAIN)。然后检查什么需要这么长时间 - 分页查询或计数查询。 BTW --> count 不带参数,也不需要。
-
计数查询需要 24sec 来执行。仅供参考,MySQL 发送数据总共需要 30 秒来获取 250 万条记录。
标签: mysql zend-framework zend-db-table zend-db-select zend-paginator