Mysql Yii2在GridView中使用activeDataProvider处理大数据的最佳方法?

Mysql Yii2在GridView中使用activeDataProvider处理大数据的最佳方法?,mysql,gridview,activerecord,yii2,Mysql,Gridview,Activerecord,Yii2,我有一个销售数据库表,有10万条记录。在未来几个月内,规模将翻一番,然后再翻三倍,等等。。该表与我需要从中获取数据的另外两个表有关。最后,我想用ActiveDataProvider列出GridView中的所有内容,但这需要很长时间(3-5分钟)。我想知道处理这种情况的最好办法是什么 我当前的查询如下所示: $query = Sale::find()->select([ 's.*', 'u.username as userName', 'ship.name as Sh

我有一个销售数据库表,有10万条记录。在未来几个月内,规模将翻一番,然后再翻三倍,等等。。该表与我需要从中获取数据的另外两个表有关。最后,我想用ActiveDataProvider列出GridView中的所有内容,但这需要很长时间(3-5分钟)。我想知道处理这种情况的最好办法是什么

我当前的查询如下所示:

$query = Sale::find()->select([
    's.*',
    'u.username as userName',
    'ship.name as ShipName'
])
  ->joinWith('user')
  ->joinWith('shipping')

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
            'defaultPageSize' => 25,
            'pageSizeLimit' => 1000],
    ]);

正如您所见,这是一个简单的查询,但数据太大,无法正常工作。。我能做什么?

我的第一个猜测是您没有正确地为表编制索引(如果有的话)。第二种猜测是,您调用了网格中不急于加载的其他关系。第三,您将数据库保存在单独的服务器上,并且与应用程序的连接不良。您需要检查Yii 2日志和SQL日志。@Bizley感谢您的评论。1.你是对的,我没有索引表。2.不,没有额外的关系。3.这是相同的数据库,连接非常好。你认为索引可以极大地提高查询性能吗?是的,绝对可以。只是出于测试目的:如果从相关字段(和joinWith)中删除数据,那么查询运行时是什么?10万行似乎并不多。如果您在“user”和“shipping”上有主键,并且在where条件下未使用任何其他字段,则不会对性能产生任何明显影响。是否混淆了db时间和渲染时间?