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的函數?
我草!看不懂!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM