我与我的一位同事讨论了关于SQL中的Joins(更多mysql)。我不敢相信我应该不惜一切代价逃避连接,因为加入一个大表会将整个表加载到服务器的内存中,因此会在内存中填充大量数据。但是如果我使用一个没有连接和循环的简单查询,它将是一个更好的内存和处理速度性能。例如(它的更多Pseudocode和PHP):
表的大小:
- 用户:30 mb
- 行动:20kb
代码(带加入)
$actionArray = sql_stmt(SELECT action.rating, user.username FROM user INNER JOIN action on user.id = action.id WHERE action.id = 1)
$endresult[] = $actionArray
代码(没有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'];
}
结果是相同的,但我必须选择第二个选项,因为在我的公司,我们不允许使用连接(参见上面的说明),而不仅仅是在我的小型广告公司,即使是在更大的公司(50 - 100)员工或在线游戏开发)他们没有使用连接!
这是公司(尤其是网站)吗?因为一个网站的1000名访问者可能会溢出服务器内存,所以加入了连接?
我无法相信这种论证。是不是比循环所有必要的数据更快地执行代码?