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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买的东西很贵质量不好怎么办 在淘宝开的店账号忘了怎么办 建了个淘宝优惠券群没人购物怎么办 刚开的淘宝店没有生意怎么办 房产代理公司不给渠道结佣金怎么办 天猫超过72小时不发货怎么办 流量魔盒苹果下载怎么打不开怎么办 淘宝包邮店铺新疆地区拍怎么办 淘宝客服当顾客要优惠时怎么办 微信手机号注册的找不到了怎么办 之前注册的微信找不到了怎么办 苹果ipad的id密码忘了怎么办 淘宝和支付宝用一张银行卡怎么办 淘宝卖家填写虚假物流信息怎么办 淘宝店铺的浏览量越来越少怎么办 网上充手机话费充错了怎么办 夜神模拟器上陌陌的位置不对怎么办 如果在大庭广众之下放了个屁怎么办 淘宝分销上传宝贝被系统下架怎么办 酷狗喜欢歌单里面的歌都没了怎么办 苹果手机下载不了微信缓冲怎么办 登陆微信提示版本过低登不了怎么办 苹果手机微信版本过低登不上怎么办 微信小程序显示微信版本过低怎么办 三星手机登微信显示版本过低怎么办 微信版本低无法登录无法升级怎么办 手机淘宝五应用界面无法打开怎么办 入住淘宝主播没有微博粉丝怎么办 手机淘宝领金币怎么没有了怎么办 淘宝荬家缺货对付款买家怎么办 淘宝买家确认收货后申请退款怎么办 淘宝东西失效了但付过款了怎么办 淘宝图片被投诉盗图怎么办原图没了 淘宝退款申请不小心撤销了怎么办 淘宝不小心点了撤销退款怎么办 淘宝上退款不小心撤销了怎么办 新店淘宝卖家想开通直播怎么办 想开通淘宝直播却没有粉丝怎么办 淘宝店家拒绝给我改地址怎么办0 淘宝被投诉卖假申诉失败怎么办 要退保证金但是有人买东西了怎么办