gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:11:55 25 4
gpt4 key购买 nike

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

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

一个(远程)数据库看起来像这样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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com