cakePHP和sql查看 - 分页需要很长时间才能加载?

时间:2017-04-03 21:48:12

标签: sql-server cakephp optimization sql-view

我目前正在开发cakePHP项目。我卡住了。

我创建了一个使用MSSQL视图作为表格的模型:

<?php
    class OrderList extends AppModel{
        public $useTable = 'vOrderList';
        public $primaryKey = 'OrderNumber';
        public $order = array(
            "OrderList.OrderNumber"=>"desc"
        );
    }

在sepreate model的控制器中,我正在加载此自定义模型并尝试对索引页的结果进行分页:

        $this->loadModel("OrderList");
        $this->paginate = array(
            "OrderList" => array(
                'limit'=>10,
                'contain'=>array()
            );
        );
        $results = $this->paginate("OrderList");

然而,查询花了太长时间!

加载页面需要8秒钟! 但是,如果我直接在mssql中打开视图表,则只需几毫秒即可加载。

我无法弄明白为什么!

当我加载除我创建的视图之外的任何其他模型时,它完美无缺。它只适用于我制作的自定义视图表

如果有人有任何想法,我可以使用你的帮助!

提前致谢!

1 个答案:

答案 0 :(得分:0)

好吧我明白了。它计算了vOrderList中的条目数,这是大部分时间都在进行的。我改变了我的OrderList模型来代替实际的订单表。

/**
 * Overridden paginate method 
 */
public function paginate($conditions, $fields, $order, $limit, $page = 1,
    $recursive = null, $extra = array()) {
    $recursive = -1;

    return $this->find(
        'all',
        compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive', 'group')
    );
}

/**
 * Overridden paginateCount method
 */
public function paginateCount($conditions = null, $recursive = 0,
                                $extra = array()) {
    $sql =
        "
        SELECT COUNT(*) AS [count] FROM [CustomerOrder] AS [Order] WHERE 1 = 1
        ";
    $this->recursive = $recursive;
    $results = $this->query($sql);
    return count($results);
}