PHP7使用原生PDO查询和使用Yii2的AR类查询的效率问题
来源:互联网 发布:矩阵组织项目组织结构 编辑:程序博客网 时间:2024/06/05 19:19
做一个实时监控任务进度监控定时脚本,mysql在数据表(表 ·sl_ws_data_task_page· )超过20w条时用客户端工具连接Mysql总会卡顿2s
于是我检查了下代码:
发现使用Explain select后使用的Extra类型为 Using where,我意识到,sql语句要优化;
看了下线上环境的代码:
在Yii2中使用where in 子句前后的内存使用情况:
find前 6658.4375 KB
find后 9966.0078125 KB
虽然多了3300KB,相比下面手写PDO查询,完全可以忍受!
$pageArr = SlWsDataTaskPageConsole::find()->select('item_id, task_id, state')->where(['in', 'task_id', $cronIds])->asArray()->all();
由于where in是要遍历全表的
于是我在本地改成了下面这样(使用lefj join 临时表代替where in子句),并在执行前后获取了PHP内存的实际使用情况:
$m = memory_get_usage() / 1024;echo __LINE__." $m KB\r\n";$sth = Yii::$app->db->masterPdo->prepare('SELECT p.item_id FROM sl_ws_data_task_page '.'p LEFT JOIN temp_tb_sl_item_id i ON p.item_id = i.id');$sth->execute();$m = memory_get_usage() / 1024;echo __LINE__." $m KB\r\n";
调用prepare前为 6645.96875 KB
调用$sth->execute后为 92702.3203125 KB内存飙升了86000 KB
原生代码的内存占用还能飙这么高
那就继续使用Yii2自带的AR类吧,Mysql全表就全表吧,至少不会报
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes)
抽时间看下Yii2的底层查询实现,待续
阅读全文
0 0
- PHP7使用原生PDO查询和使用Yii2的AR类查询的效率问题
- 使用PDO连接数据库 查询和插入乱码的解决方法
- 使用PDO连接数据库 查询和插入乱码的解决方法
- 使用PDO连接数据库 查询和插入乱码的解决方法
- Yii2.0使用AR联表查询实例
- yii2.0使用AR查询,将数据库时间戳格式化
- Yii2 AR查询
- YII2 关联查询使用
- Yii2 使用 Joins 查询
- YII2.0探究二:AR类和Query类的原理以及使用(一)
- PDO 使用prepare执行准备好的查询
- 在php使用PDO类查询Mysql
- hinernate--推荐使用原生SQL语句进行查询(效率高)
- ?PDO中嵌套查询_子查询的问题
- php PDO使用bindValue进行模糊查询问题
- HQL和原生SQL查询的数据类型问题
- 关于Hibernate在使用原生SQL语句多表查询所遇到的问题
- 使用原生jdbc查询数据库时存在的问题及对策
- qtstylesheet 渐变
- 福州市第一张全域覆盖的LoRa物联网络在马尾区顺利建成
- eclipse报错Server Tomcat v7.0 Server at localhost failed to start.
- Java网络编程基础知识(IP/端口/协议)
- 文章标题
- PHP7使用原生PDO查询和使用Yii2的AR类查询的效率问题
- Spark Java版 windows本地开发环境
- linux分区格式化挂载mount
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- fiddler修改接口请求返回数据Response的三种方法
- CF292D Connected Components【并查集】
- jetty+spring+mybatis (三)
- Java集合-TreeSet(一)
- 拦截导弹(规律:下降子序列的个数等于最长上升子序列的长度)