TP5 中使用wherein 进行查询,太慢了,怎么优化?

如图所示

![](https://img2020.cnblogs.com/blog/1515769/202108/1515769-20210821125157932-1104520858.png)

为了做统计,在一个统计函数中,进行了13*6=78次查询,并且每次查询,都使用了where in操作。
1.网上说,where in会进行全表扫描。
应该尽力避免,我不知道如何进行避免
2.网上又说,应该使用join连接
但我现在,所有的查询,只涉及一张表,所以,使用join干嘛呢?join不是多表查询的时候,才使用的吗?
3.关于子查询
子查询和多表查询的区别什么?
4.如果使用join,是不是,我要生成一个临时表,与本身表,join一下?
那问题又来了,在tp中,如何生成临时表呢?

以上是一些问题和思考

我只想找到一个解决办法就行了。
不想找太多。

解决办法

https://blog.csdn.net/raoxiaoya/article/details/111885698
优化前

$users = $this->opDataModel->setTable('read3_user_data')->where('activity_id', $activityId)
->where('userid', 'in', array_keys($scoreArr))
->field('departid, userid, score, updatetime, nickName, userName, phone')->select();

优化后

$users = $this->opDataModel->setTable('read3_user_data')->where('activity_id', $activityId)
->where('userid in ('.join(',', array_keys($scoreArr)).')', 'in', array_keys($scoreArr))
->field('departid, userid, score, updatetime, nickName, userName, phone')->select();

但是对比一下,两段代码,只有第二行发生了变化。
那么问题来了。
作者明明说,要避免使用where绑定参数,但是,优化后的东西,绑定了两次参数,使用了两次in。
这样的写法确定管用吗?
而且,里面的join和array_keys是属于php的函数,还是属于mysql的函数,还是属于tp5的函数?
我草!看不懂!

原文地址:https://www.cnblogs.com/cn-oldboy/p/15169312.html