Yii2 GridView速度提升
我在yii2中创建了网格视图,我有2400个数据,这并不多,但网格的加载时间太长了。我从mysql数据库视图填充数据。请你解释一下如何加速网格视图 这是我的密码:Yii2 GridView速度提升,gridview,yii2,Gridview,Yii2,我在yii2中创建了网格视图,我有2400个数据,这并不多,但网格的加载时间太长了。我从mysql数据库视图填充数据。请你解释一下如何加速网格视图 这是我的密码: public function search($params) { $this->load($params); $query = (new Query) ->select('*') ->from('view_quotation_grid')
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调试面板和浏览器控制台,例如,这可能不是数据库问题,而是资产加载问题。