MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT
之前都是使用同事封装好的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操作的
最新文章
- java 多线程(ThreadPoolExecutor (补充))
- 【微信Java开发 --番外篇】错误解析
- java之进制转换
- C#中正则表达式只取前N个匹配结果
- HDU 4300 Clairewd’s message(扩展KMP)
- Ultimus BPM 零售和快消品行业应用解决方案
- 知识点:Mysql 数据库索引优化实战(4)
- RMAN_RAC归档日志备份包恢复到单机
- React使用Styled-Componets来添加样式
- java框架之Hibernate(2)-持久化类&;主键生成策略&;缓存&;事务&;查询
- 在Qt Quick中一个简单Hello World加载过程
- Python-第三方模块requests快速入手
- BZOJ.2007.[NOI2010]海拔(最小割 对偶图最短路)
- iOS-CocoaPods安装及使用
- NSDictionary 和NSArray 排序(sort)
- MySQL总结小妙招
- asp.net 在线解压缩文件类
- js中对象的一些特性,JSON,scroll家族
- LeetCode——Longest Palindromic Subsequence
- 关于NativeEvent的处理
热门文章
- C++中的public、protected 及 private 用法
- java基础-day15
- 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
- Alpha阶段scrum meeting七天冲刺博客-天冷记得穿秋裤队
- EBS 多sheet页Excel动态报表开发过程
- python threading模块
- Spark技术的总结 以及同storm,Flink技术的对比
- ConcurrentHashMap源码解析(2)
- 201621123018《Java程序设计》第10周学习报告
- C++获取系统信息(IP地址、硬件信息等)