优化Yii2 MYSQL查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化Yii2 MYSQL查询相关的知识,希望对你有一定的参考价值。

我需要优化我的code.it工作,但需要时间,有时超时。

表1和表2中的目标选定列必须组合在另一个表中。新表中不允许重复。 TIA

 $modelsc=Customers::find()->select('customer_id')->all();
 $modelsp = Product::find()->select('product_no')->all();
 foreach($modelsc as $modelc) {                                                                      
     $user = $connection->createCommand(
           'SELECT product_no as product_no,:cust_no as fkcustomer_id                                                                                                         
             FROM product AS p                                                                                                           
             WHERE NOT EXISTS( SELECT pc.fkproduct_no                                                                                                                         
             FROM                                                                                                                               
             productcustomer AS pc
             WHERE
            pc.fkproduct_no = p.Product_no AND fkcustomer_id = :cust_no)');
      $user->bindValue(':cust_no', $modelc->customer_id);
      $modelsx = $user->queryAll();    
      Yii::$app->db->createCommand()->batchInsert('productcustomer', [ 'fkproduct_no', 'fkcustomer_id'], $modelsx)->execute();                                                          }
答案

查看你的代码你可以避免使用not exists子句尝试在pc.fkproduct_no上使用左连接checkn for null

SELECT product_no as product_no,
      :cust_no as fkcustomer_id                                           
FROM product AS p   
LEFT JOIN  productcustomer AS pc ON  pc.fkproduct_no = p.Product_no 
    AND fkcustomer_id = :cust_no  
WHERE pc.fkproduct_no  is null

无论如何,请确保您在连接条件的列上有适当的索引

对于表products,列Product_no的索引

productcustomer(fkcustomer_id, fkproduct_no)的综合指数

以上是关于优化Yii2 MYSQL查询的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询格式从ZEND更改为Yii2

我 && yii2 (路由优化)

Yii2实现跨mysql数据库关联查询排序功能

Yii2片段缓存详解

yii2中关联查询

Yii2——MYSQL操作