有时候这样的效率还可以,但是只要牵涉到操作数据库,那就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. iOS-@inerface的11条规范写法

    总结一些interface声明时的规范,相关宏的介绍,定义方法时有用的修饰符,编写注释的规范,最终写出一个合格的头文件. 1.读写权限 1.1实例变量的@public,@protected,@priv ...

  2. 【bzoj4059】[Cerc2012]Non-boring sequences 分治

    题目描述 我们害怕把这道题题面搞得太无聊了,所以我们决定让这题超短.一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的数字,即每个子序列里至少存在一个数字只出现一次.给定一个整数序列, ...

  3. Atcoder Regular Contest 092 A 的改编

    原题地址 题目大意 给定平面上的 $n$ 个点 $p_1, \dots, p_n$ .第 $i$ 点的坐标为 $(x_i, y_i)$ .$x_i$ 各不相同,$y_i$ 也各不相同.若两点 $p_i ...

  4. border-radius元素overflow:hidden失效问题

    父元素使用border-radius和overflow:hidden做成圆形,子元素如果使用了transform属性,则父元素的overflow:hidden会失效. 解决方法: 父元素使用 -wei ...

  5. THUWC 2018(游记)

    这次是在雅礼洋湖中学举行的,一所2017年才创办的学校,新的学校, 貌似有些危险,积雪过多屋顶上的冰块砸下来,很容易砸到人, 听说最近就有一个人被砸死了. Day1 昨天睡的比较迟,12点吧,今天早上 ...

  6. 控制cxGrid 主从表的明细只展开一个

    procedure TForm.ADetailDataControllerCollapsing( ADataController: TcxCustomDataController; ARecordIn ...

  7. Java数据结构-------Map

    常用Map:Hashtable.HashMap.LinkedHashMap.TreeMap 类继承关系: HashMap 1)无序:  2)访问速度快:  3)key不允许重复(只允许存在一个null ...

  8. EF4.2预览版出来了

    原文发布时间为:2011-09-21 -- 来源于本人的百度文章 [由搬家工具导入] http://blogs.msdn.com/b/adonet/archive/2011/08/22/ef-4-2- ...

  9. aspx生成静态页面html 例子

    原文发布时间为:2009-07-26 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  10. C#Json转Xml格式数据的方法

    第一种方法 string Xml = "在这里写Json字符串"; XmlDictionaryReader reader = JsonReaderWriterFactory.Cre ...