有时候这样的效率还可以,但是只要牵涉到操作数据库,那就GAMEOVER。。

最近在维护项目,一个Foreach循环,4分半才能出来结果。

代码:

foreach ($content as $key => $val) {

            $user = $userModel->where(array('username'=>$val))->Field('id,username')->find();

            if ($user) {

                //查找群里是否存在

                if(!$ck_group_userModel->where(array('uid'=>$user['id']))->Field('uid')->find()){                    

                    $data[] = array('id'=>$user['id'],'username'=>$user['username']);

                }

            }else{

                $id = $userModel->add(array('username'=>$val,'password'=>1234,'pid'=>9,'type'=>3));

                $data[] = array('id'=>$id,'username'=>$val);

            }            

}

 

查询时候在群中这个操作极慢!!!数据库已经添加索引。。。

考虑用户量太大,而且没有缓冲机制。只能一次次读库。

修改优化方案:

将循环查询和插入改为批量操作。减少操作数据库次数。

优化代码:

$userModel = M('user');

        $ck_group_userModel = M('ck_group_user');

        $data = array();

        $where['username'] = array('in',$content);

        $user = $userModel->where($where)->Field('id,username')->select();

        //根据java接口用户名,批量查询用户是否存在         

        for($i=0;$i<count($user);$i++){

             $userid[$i]=$user[$i]['id'];

             $newuser[$i]=$user[$i]['username'];

        }

        $newuser = array_flip($newuser);

        $newuser = array_flip($newuser);//去重

        $nouser = array_diff($content,$newuser);//不存在的用户

        if($nouser){//用户不存在

            foreach ($nouser as $key => $val) {

                $dataList[] = array('username'=>$val,'password'=>'wanxue','pid'=>9,'type'=>3);//要批量插入的数据

            }

            $userModel->addAll($dataList);

            $con1['username'] = array('in',$nouser);

            $con1['pid'] = array('eq',$college_name['region_id']);

            $data = $userModel->where($con1)->Field('id,username')->select();            

        }else{

            //查找群里是否存在            

            $con2['uid'] = array('in',$userid);

            $ingroup = $ck_group_userModel->distinct(true)->Field('uid')->select();        

            for($i=0;$i<count($ingroup);$i++){

             $ingroup[$i]=$ingroup[$i]['uid'];

            }            

            $nogroup = array_diff($userid,$ingroup);            

            $con3['id'] = array('in',$nogroup);

            $data = $userModel->where($con3)->Field('id,username')->select();            

        }

 

优化后3S出来结果。

 

Foreach嵌套Foreach速度慢优化方案的更多相关文章

  1. netty系列之:一个价值上亿的网站速度优化方案

    目录 简介 本文的目标 支持多个图片服务 http2处理器 处理页面和图像 价值上亿的速度优化方案 总结 简介 其实软件界最赚钱的不是写代码的,写代码的只能叫马龙,高级点的叫做程序员,都是苦力活.那么 ...

  2. C# 多线程 Parallel.For 和 For 谁的效率高?那么 Parallel.ForEach 和 ForEach 呢?

    还是那句话:十年河东,十年河西,莫欺少年穷. 今天和大家探讨一个问题:Parallel.For 和 For 谁的效率高呢? 从CPU使用方面而言,Parallel.For 属于多线程范畴,可以开辟多个 ...

  3. C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解

    from:https://blog.csdn.net/li315171406/article/details/78450534 最近要做一个大数据dataTable循环操作,开始发现 运用foreac ...

  4. 大型php网站性能和并发访问优化方案(转载自php中文网)

               网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎 ...

  5. 前端项目优化 -Web 开发常用优化方案、Vue & React 项目优化

    github github-myBlob 从输入URL到页面加载完成的整个过程 首先做 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来 接下来是 TCP 握手 ...

  6. 大型php网站性能和并发访问优化方案

    网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢? ...

  7. 查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题

    开发经常遇到分页查询的需求,但是当翻页过多的时候,就会产生深分页,导致查询效率急剧下降. 有没有什么办法,能解决深分页的问题呢? 本文总结了三种优化方案,查询效率直接提升10倍,一起学习一下. 1. ...

  8. Tomcat 配置详解/优化方案

     转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置 ...

  9. 一个网站完整详细的SEO优化方案

    根据自己的个人经验完成了这篇文章,希望对SEOer有点帮助,高手直接跳过,请勿喷水... 一个完整的SEO优化方案主要由四个小组组成: 一.前端/页编人员 二.内容编辑人员 三.推广人员 四.数据分析 ...

随机推荐

  1. input[type="radio"]自定义样式

    input为radio时,虽然会有默认选中的样式,但是并不符合大多数项目的需求,我们的目标是可以随心所欲自定义它的样式.怎么做呢?其实很简单,只要抓住3点.分别是1.label 2.隐藏自带样式 3. ...

  2. 汇编中的 imul 指令

    1.这是整形乘法指令,无论是 unsigned int 还算是 signed int 实际上指令都是进行相同的运算,只不过最终的结果是由程序中的类型来做相应的解读 2.imul 指令实际上不会发生 o ...

  3. CODEVS【1380】没有上司的舞会

    题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现在有个周年庆宴会 ...

  4. form+iframe+file 页面无刷新上传文件并获取返回值

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. hdu 5950 Recursive sequence 递推式 矩阵快速幂

    题目链接 题意 给定\(c_0,c_1,求c_n(c_0,c_1,n\lt 2^{31})\),递推公式为 \[c_i=c_{i-1}+2c_{i-2}+i^4\] 思路 参考 将递推式改写\[\be ...

  6. 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)

    原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...

  7. 使用python将ppm格式转换成jpg【转】

    转自:http://blog.csdn.net/hitbeauty/article/details/48465017 最近有个很火的文章,叫 有没有一段代码,让你觉得人类的智慧也可以璀璨无比? 自己试 ...

  8. Swift Perfect 服务器配置(Ubuntu16.0.4 主机、虚拟机)

    Mac 开发环境 brew install mysql@5.7 && brew link mysql@5.7 --force mysql.server startmysql_secur ...

  9. 转:[小北De编程手记] : Selenium For C# 教程目录

    写<Selnium For C#>系列文章的初衷是因为有很多朋友问我应该从哪里开始学习自动化测试,于是就为大家写下了这个系列的文章,希望对你有些帮助吧.而我想表达的是Selenium(同时 ...

  10. hdu 1573(中国剩余定理)

    X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...