之前都是使用同事封装好的mysql类,今天做性能测试时自己手动编写了查询mysql的操作。偶然发现mysqli::query(或者mysqli_query有一个参数$resultmode取值为MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT。平时封装好的类中都是使用默认的MYSQLI_STORE_RESULT。Phpmanul上给出了这么一段话:

 Either the constant MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT depending on the desired behavior. By default, MYSQLI_STORE_RESULT is used.

If you use MYSQLI_USE_RESULT all subsequent calls will return error Commands out of sync unless you call mysqli_free_result().

MYSQLI_USE_RESULT:

MYSQLI_STORE_RESULT:

看到没有,果然有区别,使用MYSQLI_USE_RESULT时返回的结果集对象的num_rows为0,而使用MYSQLI_STORE_RESULT时返回的结果集对象的num_rows为本次查询对应的实际行数。

上面一个结果是store的,后面一个是use的,上面小号的内存比下面多一个数量级,而且只取了id和url两个字段,下面出现负数是因为affect_num在MYSQLI_USE_RESULT时为0,而每次的内存增量后面的一种情况也会较少。

当我要使用一个脚本挂机处理50w+条记录的时候,简单的方法就是使用use来获取数据,这样每次只从服务器取一条。复杂点的计算好php内存容量,每次定量取几千条,然后处理写个循环处理,这样可以减少服务端压力。更复杂的可以多进程处理开三个进程跑,每次都按复杂的方法处理。

注意,使用use_result时,结果集是存储在服务器端,如果不释放结果集执行下一条sql语句会报错,报错信息为Commands out of sync; you can't run this command nowArray,所以我是新建第二个mysql连接处理insert,update操作的

最新文章

  1. java 多线程(ThreadPoolExecutor (补充))
  2. 【微信Java开发 --番外篇】错误解析
  3. java之进制转换
  4. C#中正则表达式只取前N个匹配结果
  5. HDU 4300 Clairewd’s message(扩展KMP)
  6. Ultimus BPM 零售和快消品行业应用解决方案
  7. 知识点:Mysql 数据库索引优化实战(4)
  8. RMAN_RAC归档日志备份包恢复到单机
  9. React使用Styled-Componets来添加样式
  10. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
  11. 在Qt Quick中一个简单Hello World加载过程
  12. Python-第三方模块requests快速入手
  13. BZOJ.2007.[NOI2010]海拔(最小割 对偶图最短路)
  14. iOS-CocoaPods安装及使用
  15. NSDictionary 和NSArray 排序(sort)
  16. MySQL总结小妙招
  17. asp.net 在线解压缩文件类
  18. js中对象的一些特性,JSON,scroll家族
  19. LeetCode——Longest Palindromic Subsequence
  20. 关于NativeEvent的处理

热门文章

  1. C++中的public、protected 及 private 用法
  2. java基础-day15
  3. 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
  4. Alpha阶段scrum meeting七天冲刺博客-天冷记得穿秋裤队
  5. EBS 多sheet页Excel动态报表开发过程
  6. python threading模块
  7. Spark技术的总结 以及同storm,Flink技术的对比
  8. ConcurrentHashMap源码解析(2)
  9. 201621123018《Java程序设计》第10周学习报告
  10. C++获取系统信息(IP地址、硬件信息等)