小编典典

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

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)
{
  // ...
}

关于此的附加信息,数据库巨大,数百万行。

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

问题

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


阅读 281

收藏
2021-03-23

共1个答案

小编典典

join如果仅因为它减少了将查询来回发送到数据库的开销,则通常认为该方法更好。

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

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

2021-03-23