优化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查询的主要内容,如果未能解决你的问题,请参考以下文章