我在PHP代码中有这个功能
function a() {
//Q1 = query database and gets 13k records
//now call function b and c and pass some arguments along (which are result of Q1)
foreach(Q1){
b();
c();
}
}//end of function a
function b(){
//Q2 = query database TB1 and search against 30k rows to get 1 row
return $result;
}
function c(){
//Q2 = query database TB2 and search against 30k rows to get 1 row
return $result;
}
现在,当我运行此代码时,它会对DB进行多次调用,因为每个函数b和c都会在循环中为每个13k记录调用,这使得我的整个应用程序停止了其他mysql连接。
所以我想将TB1和TB2的记录存储在某个数组中并查询该数组以获取数据而不是mysql。之后我发现 PHPLinq 可以用于此...这是使用PHPLinq 的正确方法,还是应该使用一些其他方式在数组中存储数据并查询该数组以获取记录。
答案 0 :(得分:0)
我不相信在这里使用PHPLinq会很明智。您可以只执行一次调用,但是存储所有这些对于从数据库进行的第一次获取来说将是昂贵的,然后将大量项目存储在内存中并最终迭代它将是一个真正的痛苦(并且可能会迫使您的脚本崩溃)。
我认为合适的两项改进是:
A /使用PDO课程并使用"准备"尽可能的方法(看看here)
B /尝试"合并"尽可能的SQL查询。您是否不可能在同一SQL查询中执行B和C?甚至更好,同一查询中的3个部分。
C /另一种解决方案是创建临时SQL表并使用子查询中使用的值(在函数B和C中执行的值)填充它。您可以让您的SQL数据库处理所有繁重的工作,只需将其查询为CSV文件,除了在客户端保存一些RAM。D / As @despina建议,视图也可以证明在一个请求中公开更多可能有用的信息。