php - 循环中的 MySQL 查询与使用 SQL 连接

标签 php mysql sql

我在公司内部就这件事的循环查询进行辩论:

$sql = "
  SELECT foreign_key
  FROM t1";

foreach(fetchAll($sql) as $row)
{
  $sub_sql = "
    SELECT *
    FROM t2
    WHERE t2.id = " . $row['foreign_key'];

  foreach(fetchAll($sub_sql) as $sub_row)
  {
    // ...
  }
}

而不是像这样使用 sql 连接:

$sql = "
  SELECT t2.*
  FROM t2
  JOIN t1
  ON t1.foreign_key = t2.id";

foreach(fetchAll($sql) as $row)
{
  // ...
}

有关此的其他信息,数据库非常庞大,有数百万行。

我当然已经搜索过这个问题的答案,但没有人能以好的方式回答这个问题,并且有很多赞成票让我确信一种方式比另一种方式更好。

问题

有人可以向我解释为什么其中一种方法比另一种方法更好吗?

最佳答案

join 方法通常被认为更好,只是因为它减少了向数据库来回发送查询的开销。

如果表上有适当的索引,那么这两种方法的基础性能将相似。也就是说,这两种方法都将使用适当的索引来获取结果。

从数据库的角度来看,join 方法要优越得多。它将数据逻辑整合在一处,让代码更加透明。它还允许数据库进行在应用程序代码中可能不明显的优化。

关于php - 循环中的 MySQL 查询与使用 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404913/

相关文章:

php - 如何使用 Jquery/Javascript 清除 PHP session ?

php - 如何在 PHP 中为 $_SESSION 设置唯一名称?

php - CakePHP 虚拟字段是其他三个虚拟字段的总和?

java - 将 String[] 传递给另一个 Android 类(使用 Intent )

c# - 在 IQueryable 上执行文本 SQL 查询

php - Laravel,用 Eloquent 方式插入一对多关系

php - 结合Mysql Join的结果

php - 无法登录Usercake

mysql - 如果已设置特定值,如何在表上创建触发器以在一小时后更新字段

php - 当我输入 $time=strftime ('%c' );它显示值 00 :00:00 in database