Php 内部连接与foreach循环性能
我正在尝试做一些事情,我确信我是否以正确的方式做了。假设MySQL数据库中有两个表,其中包含以下列 -------------------------Php 内部连接与foreach循环性能,php,mysql,for-loop,foreach,inner-join,Php,Mysql,For Loop,Foreach,Inner Join,我正在尝试做一些事情,我确信我是否以正确的方式做了。假设MySQL数据库中有两个表,其中包含以下列 ------------------------- Members ------------------------- id name status ----- ----- ----- 1 Mike 0 2 Alex 0 3 John 1 4 Jack -1
Members
-------------------------
id name status
----- ----- -----
1 Mike 0
2 Alex 0
3 John 1
4 Jack -1
Status
-------------------------
id text
----- -----
-1 disapproved
0 reviewing
1 approved
-------------------------Members
-------------------------
id name status
----- ----- -----
1 Mike 0
2 Alex 0
3 John 1
4 Jack -1
Status
-------------------------
id text
----- -----
-1 disapproved
0 reviewing
1 approved
现在我需要以以下方式显示表“Members”的信息:
id name status
----- ----- -----
1 Mike reviewing
2 Alex reviewing
3 John approved
4 Jack disapproved
一种方法是在两个表之间使用内部联接,另一种方法是从“Members”表中提取数据并将其放入for each循环中并转换状态值。以后一种方式,我根本不需要“状态”表
我不知道哪条路更好。如果您需要更多信息来帮助我,请告诉我
提前谢谢
更新
假设我已经从“members”表中提取了数据,那么我想做的每一个示例都是这样的
通常,您绝对希望通过MySQL数据库中的连接来实现这一点:
SELECT
t1.id, t1.name, t2.text AS status
FROM Members t1
INNER JOIN Status t2
ON t1.status = t2.id
使用
foreach
循环在PHP代码中处理这一问题的替代方法不太吸引人,原因有几个。首先,您可能需要从两个表中引入所有信息,从内存和网络使用的角度来看,这都是浪费。然后,即使在引入数据之后,您也将依赖PHP来执行连接。PHP并不是专门为内部数据库操作而设计的,也不能使用索引之类的东西来加速过程。从性能的角度来看,在大多数情况下,使用主键关系的内部连接几乎不会受到惩罚。MySQL花了数年时间精确地优化这个用例——它被称为“关系数据库”,因为这就是它的设计目的
在您给出的示例中,即使有数千万用户,性能成本也无法在合适的硬件上衡量
另一方面,您的代码示例说明了为什么这是一个糟糕的想法
你打错了
else
$value['status'] = 'diapproved';
}
我想你的意思是“不赞成”——你的数据库就是这么说的
因为您在重复信息,所以您引入了bug的风险。一个必须修复打字错误的开发人员现在必须查看两个地方来修复错误——但哪一个是正确的?数据库,还是PHP代码
当您引入状态2-需要验证时会发生什么?现在,您必须在两个地方更新代码(并注意那些拼写错误!)
在某些情况下,性能改进是必要的。这几乎肯定不是一个;如果是,请尝试通过优化查询在数据库中解决它 我们无法告诉您哪一个是最快的(特别是,我认为,如果这些不是您真正的表,而只是您试图应用的逻辑的一个示例的话)。您必须自己测试,为每个逻辑创建一个文件,并显示检索1行、10行、100行、1000行等所花费的时间。@roberto06当然可以。MySQL总是更快。甚至没有关于它的讨论,任何时候当你认为从MySQL获取数据并做数据库设计的时候,唯一有效的结论是“不,MySQL会做得更快”。你甚至不需要测量。