最近新入职一家公司,外包,发现他们的代码中有很多下面的写法
foreach($arr as $k=>$v)
{
$a = Db::table('a')->where('a_colum',$v['some-key'])->select();
$b = Db::table('b')->where('b_colum',$v['some-key'])->select();
}
这种坑之前碰到过这样的坑,我的做法就是把相关的数据都查询出来,然后在内存中进行数据拼接,除了在循环中查询数据和在内存中拼接,大家还有什么好的办法么?求赐教。
1
lscexpress 2020-04-23 10:25:15 +08:00
优化的方向就是多条 sql 合并为一条,这就得到了优化的效果,具体做法看你怎么去实现
|
2
brader 2020-04-23 10:30:30 +08:00
你这个应该可以用 a_colum IN() 吧?
|
3
cvl 2020-04-23 10:33:32 +08:00
我之前碰到过这种 , 做法是把查询条件优化成一个数组作为条件。总的来说就是整合到一起去执行 ,得到得结果再去遍历
|
4
taaaang 2020-04-23 13:13:04 +08:00
有时候可读性好一点,牺牲一点点资源或者是性能并不是太大的问题
|
5
dilu 2020-04-23 13:15:12 +08:00
如果不需要性能,而且还是外包的话,怎么方便怎么写
|
6
madpecker009 OP @brader 是的 但是他们没用 直接这么查询的
|
7
madpecker009 OP @dilu 这么说好像也有道理 反正不是自己的产品
|
8
madpecker009 OP @cvl 好 以后再碰到会这么解决的
|
9
madpecker009 OP @lscexpress 得具体问题。现在让我这么说我也说不出实际场景
|
10
ZoR 2020-04-23 13:46:17 +08:00
刚想骂街 然后看到外包那就不新奇了 滑稽~
|
11
jugelizi 2020-04-23 13:47:46 +08:00 via iPhone
php 的程序员大多这样
|
12
ZoR 2020-04-23 13:49:21 +08:00
楼上的 我所接触 java 这么干的也不少 少泼脏水
|
13
madpecker009 OP @ZoR 如果不外包呢。。你是怎么解决的,分享下呗
|
14
madpecker009 OP @jugelizi 阴阳人烂屁股
|
15
ZoR 2020-04-23 14:04:49 +08:00
答案楼上也有 最简单的 用 in 不就解决了
|
16
DoUSeeMe 2020-04-23 17:57:40 +08:00
能一次取的就一次取,取完再做处理
|
17
anUglyDog 2020-04-23 22:35:17 +08:00
你可以把数据库和服务端应用放一个机器上或者一个机房,代码再烂也不会慢
|