Yii2 GridView速度提升

Yii2 GridView速度提升,gridview,yii2,Gridview,Yii2,我在yii2中创建了网格视图,我有2400个数据,这并不多,但网格的加载时间太长了。我从mysql数据库视图填充数据。请你解释一下如何加速网格视图 这是我的密码: public function search($params) { $this->load($params); $query = (new Query) ->select('*') ->from('view_quotation_grid')

我在yii2中创建了网格视图,我有2400个数据,这并不多,但网格的加载时间太长了。我从mysql数据库视图填充数据。请你解释一下如何加速网格视图

这是我的密码:

  public function search($params) {
        $this->load($params);

    $query = (new Query)
            ->select('*')
            ->from('view_quotation_grid')
            ->orderBy('referenceno DESC');

    if ($this->referenceno != "") {
        //$query->andFilterWhere(['like', '', $this->referenceno]);
        $query->andFilterWhere(['LIKE', 'referenceno', $this->referenceno]);
    }

    $query->andFilterWhere(['LIKE', 'customer_name', $this->customer_name]);
    $query->andFilterWhere(['LIKE', 'product_model', $this->product_model]);
    $query->andFilterWhere(['LIKE', 'quotation_status', $this->quotation_status]);
    $query->andFilterWhere(['LIKE', 'is_confirm', $this->is_confirm]);
    $query->andFilterWhere(['LIKE', 'net_total', $this->net_total]);
    $query->andFilterWhere(['LIKE', 'doc_date', $this->doc_date]);

    $pages = clone $query;
    $pages->select('COUNT(*) count');
    $pages = $pages->createCommand()->queryAll();
    $pages = $pages[0];

    $command = $query->createCommand();
    $sql = $command->sql;
    $params = $command->params;

    $dataProvider = new SqlDataProvider([
        'sql' => "$sql",
        'params' => $params,
        'totalCount' => $pages['count'],
        'sort' => [
            'attributes' => [
                'sr',
                'referenceno' => [
                    'asc' => ['referenceno' => SORT_ASC],
                    'desc' => ['referenceno' => SORT_DESC],
                    'default' => SORT_DESC,
                    'label' => 'referenceno',
                ],
                'customer_name' => [
                    'asc' => ['customer_name' => SORT_ASC],
                    'desc' => ['customer_name' => SORT_DESC],
                    'label' => 'customer_name',
                ],
                'quotation_status' => [
                    'asc' => ['quotation_status' => SORT_ASC],
                    'desc' => ['quotation_status' => SORT_DESC],
                    'label' => 'quotation_status',
                ],
                'is_confirm' => [
                    'asc' => ['is_confirm' => SORT_ASC],
                    'desc' => ['is_confirm' => SORT_DESC],
                    'label' => 'is_confirm',
                ],
                'net_total' => [
                    'asc' => ['net_total' => SORT_ASC],
                    'desc' => ['net_total' => SORT_DESC],
                    'label' => 'net_total',
                ],
                'doc_date' => [
                    'asc' => ['doc_date' => SORT_ASC],
                    'desc' => ['doc_date' => SORT_DESC],
                    'label' => 'doc_date',
                ],
            ],
        ],
        'pagination' => [
            'pageSize' => 25,
        ],
    ]);

    $models = $dataProvider->getModels();

    if (!$this->validate()) {
        // uncomment the following line if you do not want to any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    return $dataProvider;
}

尝试删除多余的方法调用:

$models = $dataProvider->getModels();
简化计算总计数(仅使用PK列代替
*
):

替换为:

$queryClone = clone $query;
$totalCount = $queryClone->count('[[id]]');     // where [[id]] is PrimaryKey
尝试为where/order_by语句中使用的列添加索引


还可用于分析SQL查询。它显示执行每个SQL查询的时间,并允许为每个查询执行
EXPLAIN
命令。

尝试删除多余的方法调用:

$models = $dataProvider->getModels();
简化计算总计数(仅使用PK列代替
*
):

替换为:

$queryClone = clone $query;
$totalCount = $queryClone->count('[[id]]');     // where [[id]] is PrimaryKey
尝试为where/order_by语句中使用的列添加索引


还可用于分析SQL查询。它显示执行每个SQL查询的时间,并允许为每个查询执行
EXPLAIN
命令。

如果有人知道如何从SQL过程创建gridview,那么请在gridview之外单独执行SQL查询以获取数据(使用应用的过滤器)和计数并查看执行时间。您可以使用
EXPLAIN
进行更深入的调查。此外,您还可以使用Yii调试面板和浏览器控制台,例如,这可能不是数据库问题,而是资产加载问题。如果有人知道如何从sql过程创建gridview,那么请在gridview之外单独执行sql查询,以获取数据(使用应用的过滤器)以及计数和查看执行时间。您可以使用
EXPLAIN
进行更深入的调查。此外,您还可以使用Yii调试面板和浏览器控制台,例如,这可能不是数据库问题,而是资产加载问题。