php - 多数据库查找 VS fetch all + array search,哪个更高效

标签 php mysql codeigniter

我敢肯定这已经被讨论过很多次了,但无论出于何种原因我都没有找到任何东西(可能是没有咖啡)。

作为一个设计问题,这里是想法。

一个(远程)数据库看起来像这样 id|timestamp|log_entry|task_id

这些被提取到 PHP/Codeigniter 门户并映射到本地数据库 task_id|name|...

现在,解析我需要的远程数据(除其他事项外)获取与每一行关联的名称。简单的方法是循环遍历结果,并在每次迭代中进行查找(id -> name)。但这会产生大量的数据库调用。我看到的另一种方法是将所有 id-name 对预取到一个数组中,然后使用它进行查找。

对于这个特定项目,我不认为性能会成为任何一种问题。但哪种方法最有效?

编辑:伪代码

<?php
// ---------- Multiple queries example ------
$log_result = mysql_query('SELECT id, task_id, log_entry, timestamp FROM remote_db WHERE date=X');

foreach ($log_result as $log_row)
{
    // Get task name for row
    $task_name = mysql_query("SELECT name FROM local_db WHERE id={$log_row['task_id']}");

    // Process this row ...
    echo "Proccesed {$task_name} which occured at {$log_row['timestamp']}";
}

// ---------- Array example -----------------
$task_lookup = mysql_query('SELECT id, name FROM local_db');
$log_result = mysql_query('SELECT id, task_id, log_entry, timestamp FROM remote_db WHERE date=X');

foreach ($log_result as $log_row)
{
    // Get task name for row
    // assume task_lookup[] = array(id => name)
    $task_name = $task_lookup[$log_row['task_id']];

    // Process this row ...
    echo "Proccesed {$task_name} which occured at {$log_row['timestamp']}";
}
?>

最佳答案

如果您无论如何都需要所有信息,那么一定要选择它一次并循环遍历您需要的信息(特别是因为数据库是远程的并且许多调用的延迟会加起来)。

编辑:查看伪代码: 您可以使用远程数据库中的 id 数组来缩小从本地数据库中获取的结果。像这样的东西:

$log_result = mysql_query('SELECT id, task_id, log_entry, timestamp FROM remote_db WHERE date=X');
$task_lookup = mysql_query('SELECT id, name FROM local_db WHERE id IN taskIdsFromLogQuery');

关于php - 多数据库查找 VS fetch all + array search,哪个更高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909220/

相关文章:

php - 在 phpmyadmin 中看不到表格内容

mysql select 基于两个条件

php - 如何卸载 Phalcon?

php - 从 views_php 过滤器返回 TRUE 未按预期工作

javascript - 如何在WordPress中动态生成JavaScript代码?

php - 使用php删除html表中的记录

php - 如何检查一个表中的 session ID 是否存在于另一个表中并回显错误或成功代码

codeigniter - Codeigniter 3 中使用不同数据库的表单验证

php - 使用 codeigniter 调用 mysql 过程 [错误 : result consisted more than one row]

php - 如何使用 codeigniter 更正发送电子邮件的方式