内存中的SQL性能(join vs. loop)

时间:2016-06-18 13:27:48

标签: php mysql performance join

我与我的一位同事讨论了关于SQL中的Joins(更多mysql)。我不敢相信我应该不惜一切代价逃避连接,因为加入一个大表会将整个表加载到服务器的内存中,因此会在内存中填充大量数据。但是如果我使用一个没有连接和循环的简单查询,它将是一个更好的内存和处理速度性能。例如(它的更多Pseudocode和PHP):

  

表的大小:

     
      
  • 用户:30 mb
  •   
  • 行动:20kb
  •   
  1. 代码(带加入)

    $actionArray = sql_stmt(SELECT action.rating, user.username FROM user INNER JOIN action on user.id = action.id WHERE action.id = 1)
    
    $endresult[] = $actionArray
    
  2. 代码(没有Join和foreach-loop)

    $actionArray = sql_stmt(SELECT * FROM action WHERE id = 1);
    
    foreach (actionArray as $row) {
    
       $user = sql_stmt(SELECT * FROM user WHERE id = $row['userid'];
       $endResult['rating'] = $row['rating'];
       $endResult['username'] = $user['username'];
    
    }
    
  3. 结果是相同的,但我必须选择第二个选项,因为在我的公司,我们不允许使用连接(参见上面的说明),而不仅仅是在我的小型广告公司,即使是在更大的公司(50 - 100)员工或在线游戏开发)他们没有使用连接!

    这是公司(尤其是网站)吗?因为一个网站的1000名访问者可能会溢出服务器内存,所以加入了连接?

    我无法相信这种论证。是不是比循环所有必要的数据更快地执行代码?

0 个答案:

没有答案