zoukankan      html  css  js  c++  java
  • 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的函数?
    我草!看不懂!

  • 相关阅读:
    微信分享
    angular 2
    angular 2
    angular 2
    angular 2
    ionic android升级检查
    ionic andorid apk 签名, 查看签名MD5
    微信支付 python版
    CSS3
    ionic 常见问题
  • 原文地址:https://www.cnblogs.com/cn-oldboy/p/15169312.html
Copyright © 2011-2022 走看看