【发布时间】:2014-07-10 09:54:03
【问题描述】:
这是一个优化问题 RE:第一原则.. 想象一下我正在做一个大的繁重比较.. 30k 文件与 30k 数据库条目.. 将一个大 MySQL 放入一个数组然后循环遍历物理是最有效的吗?文件检查与数组还是更好地循环文件然后一次执行一行 MySQL 调用..
这里有一些伪代码来帮助解释:
//is this faster?
foreach($recursiveFileList as $fullpath){
$Record = $db->queryrow("SELECT * FROM files WHERE fullpath='".$fullpath."'");
//do some $Record logic
}
//or is this faster
$BigList = array();
$db->query("SELECT * FROM files");
while($Record = $db->rows()){
$BigList[$Record['fullpath']] = $Record;
}
foreach($recursiveFileList as $fullpath){
if (isset($BigList[$fullpath])){
$Record = $BigList[$fullpath];
//do some $Record logic
}
}
【问题讨论】:
-
您的 SQL 服务器与文件服务器不同吗?如果不是,那也没关系 tbh.MySQL 仍在使用文件将这些数据存储在您的服务器上,它只是为您提供了一个接口来推断所述数据。这主要只是一个微优化。
-
这是一个本地数据库 - 一个 LAMP 服务器,也没有存储在 MySQL 中的文件 - 纯粹的路径名
-
那真的没什么区别。如果您愿意,您可以连接第二台计算机并将其作为您的 SQL 服务器,然后您可以将大量处理卸载到 SQL 服务器上,这将有助于降低开销。但是,就目前而言,这将是最小的性能提升。
-
你为什么不试试呢? stackoverflow.com/questions/6245971/…
-
你这里用什么接口连接MySQL?您没有使用占位符,这通常表明您做错了事,并使自己面临严重的SQL injection bugs 风险。
标签: php mysql optimization lamp